1 // Copyright (c) 2012 Robert Ramey
3 // Distributed under the Boost Software License, Version 1.0. (See
4 // accompanying file LICENSE_1_0.txt or copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
9 #include <boost/safe_numerics/safe_integer.hpp>
10 #include <boost/safe_numerics/automatic.hpp>
13 using safe_t
= boost::safe_numerics::safe
<
15 boost::safe_numerics::automatic
17 #include "test_less_than.hpp"
19 #include <boost/mp11/algorithm.hpp>
20 #include <boost/core/demangle.hpp>
21 #include "test_compare_automatic.hpp"
23 using namespace boost::mp11
;
27 static_assert(mp_is_list
<L
>(), "must be a list of integral constants");
29 test(bool b
= true) : m_error(b
) {}
34 void operator()(const T
&){
35 static_assert(mp_is_list
<T
>(), "must be a list of two integral constants");
36 constexpr size_t i1
= mp_first
<T
>(); // index of first argument
37 constexpr size_t i2
= mp_second
<T
>();// index of second argument
38 std::cout
<< i1
<< ',' << i2
<< ',';
39 using T1
= typename mp_at_c
<L
, i1
>::value_type
;
40 using T2
= typename mp_at_c
<L
, i2
>::value_type
;
41 m_error
&= test_less_than(
42 mp_at_c
<L
, i1
>()(), // value of first argument
43 mp_at_c
<L
, i2
>()(), // value of second argument
44 boost::core::demangle(typeid(T1
).name()).c_str(),
45 boost::core::demangle(typeid(T2
).name()).c_str(),
46 test_compare_automatic_result
[i1
][i2
]
52 test
<test_values
> rval(true);
54 using value_indices
= mp_iota_c
<mp_size
<test_values
>::value
>;
56 mp_product
<mp_list
, value_indices
, value_indices
>
59 std::cout
<< (rval
? "success!" : "failure") << std::endl
;