metaparse/doc/in_range_c.qbk
2015-07-19 09:53:35 +02:00

84 lines
1.9 KiB
Plaintext

[#in_range_c]
[section in_range_c]
[h1 Synopsis]
namespace util
{
template <class T, T LowerBound, T UpperBound>
struct in_range_c
{
template <class U>
struct apply;
};
}
This is a [link metafunction_class template metafunction class].
[table Arguments
[[Name] [Type]]
[[`T`] [integral type]]
[[`LowerBound`] [value of type `T`]]
[[`UpperBound`] [value of type `T`]]
[[`U`] [[link boxed_value boxed integral value]]]
]
[h1 Description]
Metafunction class verifying that `U` is in the `[LowerBound..UpperBound]` range
or not.
[h1 Header]
#include <boost/metaparse/util/in_range_c.hpp>
[h1 Expression semantics]
For any `T` integral type, `A`, `B` values of type `T` and `C` wrapped value the
following are equivalent:
in_range_c<T, A, B>::apply<C>::type::value
A <= C::type::value && C::type::value <= B
[h1 Example]
#include <boost/metaparse/util/in_range_c.hpp>
#include <type_traits>
using namespace boost::metaparse;
static_assert(
!util::in_range_c<int, 11, 13>
::apply<std::integral_constant<int, 10>>::type::value,
"A value below the lower bound should not be in the range"
);
static_assert(
!util::in_range_c<int, 11, 13>
::apply<std::integral_constant<int, 14>>::type::value,
"A value above the upper bound should not be in the range"
);
static_assert(
util::in_range_c<int, 11, 13>
::apply<std::integral_constant<int, 11>>::type::value,
"The lower bound should be in the range"
);
static_assert(
util::in_range_c<int, 11, 13>
::apply<std::integral_constant<int, 13>>::type::value,
"The upper bound should be in the range"
);
static_assert(
util::in_range_c<int, 11, 13>
::apply<std::integral_constant<int, 12>>::type::value,
"A value between the bounds should be in the range"
);
[endsect]