]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | [#in_range_c] |
2 | [section in_range_c] | |
3 | ||
4 | [h1 Synopsis] | |
5 | ||
6 | namespace util | |
7 | { | |
8 | template <class T, T LowerBound, T UpperBound> | |
9 | struct in_range_c | |
10 | { | |
11 | template <class U> | |
12 | struct apply; | |
13 | }; | |
14 | } | |
15 | ||
16 | This is a [link metafunction_class template metafunction class]. | |
17 | ||
18 | [table Arguments | |
19 | [[Name] [Type]] | |
20 | [[`T`] [integral type]] | |
21 | [[`LowerBound`] [value of type `T`]] | |
22 | [[`UpperBound`] [value of type `T`]] | |
23 | [[`U`] [[link boxed_value boxed integral value]]] | |
24 | ] | |
25 | ||
26 | [h1 Description] | |
27 | ||
28 | Metafunction class verifying that `U` is in the `[LowerBound..UpperBound]` range | |
29 | or not. | |
30 | ||
31 | [h1 Header] | |
32 | ||
33 | #include <boost/metaparse/util/in_range_c.hpp> | |
34 | ||
35 | [h1 Expression semantics] | |
36 | ||
37 | For any `T` integral type, `A`, `B` values of type `T` and `C` wrapped value the | |
38 | following are equivalent: | |
39 | ||
40 | in_range_c<T, A, B>::apply<C>::type::value | |
41 | ||
42 | A <= C::type::value && C::type::value <= B | |
43 | ||
44 | [h1 Example] | |
45 | ||
46 | #include <boost/metaparse/util/in_range_c.hpp> | |
47 | ||
48 | #include <type_traits> | |
49 | ||
50 | using namespace boost::metaparse; | |
51 | ||
52 | static_assert( | |
53 | !util::in_range_c<int, 11, 13> | |
54 | ::apply<std::integral_constant<int, 10>>::type::value, | |
55 | "A value below the lower bound should not be in the range" | |
56 | ); | |
57 | ||
58 | static_assert( | |
59 | !util::in_range_c<int, 11, 13> | |
60 | ::apply<std::integral_constant<int, 14>>::type::value, | |
61 | "A value above the upper bound should not be in the range" | |
62 | ); | |
63 | ||
64 | static_assert( | |
65 | util::in_range_c<int, 11, 13> | |
66 | ::apply<std::integral_constant<int, 11>>::type::value, | |
67 | "The lower bound should be in the range" | |
68 | ); | |
69 | ||
70 | static_assert( | |
71 | util::in_range_c<int, 11, 13> | |
72 | ::apply<std::integral_constant<int, 13>>::type::value, | |
73 | "The upper bound should be in the range" | |
74 | ); | |
75 | ||
76 | static_assert( | |
77 | util::in_range_c<int, 11, 13> | |
78 | ::apply<std::integral_constant<int, 12>>::type::value, | |
79 | "A value between the bounds should be in the range" | |
80 | ); | |
81 | ||
82 | [endsect] | |
83 |