1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
|
/*!
@file
Forward declares `boost::hana::integral_constant`.
@copyright Louis Dionne 2013-2017
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
*/
#ifndef BOOST_HANA_FWD_INTEGRAL_CONSTANT_HPP
#define BOOST_HANA_FWD_INTEGRAL_CONSTANT_HPP
#include <boost/hana/config.hpp>
#include <boost/hana/detail/integral_constant.hpp>
#include <cstddef>
BOOST_HANA_NAMESPACE_BEGIN
//! Creates an `integral_constant` holding the given compile-time value.
//! @relates hana::integral_constant
//!
//! Specifically, `integral_c<T, v>` is a `hana::integral_constant`
//! holding the compile-time value `v` of an integral type `T`.
//!
//!
//! @tparam T
//! The type of the value to hold in the `integral_constant`.
//! It must be an integral type.
//!
//! @tparam v
//! The integral value to hold in the `integral_constant`.
//!
//!
//! Example
//! -------
//! @snippet example/integral_constant.cpp integral_c
template <typename T, T v>
constexpr integral_constant<T, v> integral_c{};
//! @relates hana::integral_constant
template <bool b>
using bool_ = integral_constant<bool, b>;
//! @relates hana::integral_constant
template <bool b>
constexpr bool_<b> bool_c{};
//! @relates hana::integral_constant
using true_ = bool_<true>;
//! @relates hana::integral_constant
constexpr auto true_c = bool_c<true>;
//! @relates hana::integral_constant
using false_ = bool_<false>;
//! @relates hana::integral_constant
constexpr auto false_c = bool_c<false>;
//! @relates hana::integral_constant
template <char c>
using char_ = integral_constant<char, c>;
//! @relates hana::integral_constant
template <char c>
constexpr char_<c> char_c{};
//! @relates hana::integral_constant
template <short i>
using short_ = integral_constant<short, i>;
//! @relates hana::integral_constant
template <short i>
constexpr short_<i> short_c{};
//! @relates hana::integral_constant
template <unsigned short i>
using ushort_ = integral_constant<unsigned short, i>;
//! @relates hana::integral_constant
template <unsigned short i>
constexpr ushort_<i> ushort_c{};
//! @relates hana::integral_constant
template <int i>
using int_ = integral_constant<int, i>;
//! @relates hana::integral_constant
template <int i>
constexpr int_<i> int_c{};
//! @relates hana::integral_constant
template <unsigned int i>
using uint = integral_constant<unsigned int, i>;
//! @relates hana::integral_constant
template <unsigned int i>
constexpr uint<i> uint_c{};
//! @relates hana::integral_constant
template <long i>
using long_ = integral_constant<long, i>;
//! @relates hana::integral_constant
template <long i>
constexpr long_<i> long_c{};
//! @relates hana::integral_constant
template <unsigned long i>
using ulong = integral_constant<unsigned long, i>;
//! @relates hana::integral_constant
template <unsigned long i>
constexpr ulong<i> ulong_c{};
//! @relates hana::integral_constant
template <long long i>
using llong = integral_constant<long long, i>;
//! @relates hana::integral_constant
template <long long i>
constexpr llong<i> llong_c{};
//! @relates hana::integral_constant
template <unsigned long long i>
using ullong = integral_constant<unsigned long long, i>;
//! @relates hana::integral_constant
template <unsigned long long i>
constexpr ullong<i> ullong_c{};
//! @relates hana::integral_constant
template <std::size_t i>
using size_t = integral_constant<std::size_t, i>;
//! @relates hana::integral_constant
template <std::size_t i>
constexpr size_t<i> size_c{};
namespace literals {
//! Creates a `hana::integral_constant` from a literal.
//! @relatesalso boost::hana::integral_constant
//!
//! The literal is parsed at compile-time and the result is returned
//! as a `llong<...>`.
//!
//! @note
//! We use `llong<...>` instead of `ullong<...>` because using an
//! unsigned type leads to unexpected behavior when doing stuff like
//! `-1_c`. If we used an unsigned type, `-1_c` would be something
//! like `ullong<-1>` which is actually `ullong<something huge>`.
//!
//!
//! Example
//! -------
//! @snippet example/integral_constant.cpp literals
template <char ...c>
constexpr auto operator"" _c();
}
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_FWD_INTEGRAL_CONSTANT_HPP
|