5 #ifndef TCPSPSUITE_SOLVERS_HPP
6 #define TCPSPSUITE_SOLVERS_HPP
10 #include <boost/hana.hpp>
11 #include <boost/hana/set.hpp>
12 #include <boost/hana/assert.hpp>
13 namespace hana = boost::hana;
22 struct sfinae_true : std::true_type
29 template <
unsigned int>
34 template <
class Dummy,
unsigned int testN>
36 test(
int) -> sfinae_true<decltype(registry_hook<testN>{})>;
38 template <
class Dummy,
unsigned int testN>
40 test(
long) -> std::false_type;
46 template <
class Dummy,
unsigned int testN = 0>
47 constexpr
unsigned int
53 if constexpr (std::is_same<decltype(test<Dummy, testN>(0)), std::false_type>::value) {
56 return get_free_N<Dummy, testN + 1>();
61 template <
class ClassToRegister,
unsigned int myN>
69 return hana::insert(registry_hook<myN - 1>{}(), hana::type_c < ClassToRegister > );
73 template <
class ClassToRegister>
74 struct register_class<ClassToRegister, 0>
81 return hana::make<hana::set_tag>(hana::type_c < ClassToRegister > );
88 #endif //TCPSPSUITE_SOLVERS_HPP