int main() { BOOST_HANA_CONSTANT_ASSERT(constant_bool<true, void>()); BOOST_HANA_CONSTANT_ASSERT(constant_bool<true, void, void>()); BOOST_HANA_CONSTANT_ASSERT(constant_bool<true, void, void, void>()); BOOST_HANA_RUNTIME_ASSERT(runtime_bool<true, void>()); BOOST_HANA_RUNTIME_ASSERT(runtime_bool<true, void, void>()); BOOST_HANA_RUNTIME_ASSERT(runtime_bool<true, void, void, void>()); BOOST_HANA_ASSERT(runtime_bool<true, void>()); BOOST_HANA_ASSERT(runtime_bool<true, void, void>()); BOOST_HANA_ASSERT(runtime_bool<true, void, void, void>()); BOOST_HANA_ASSERT(constant_bool<true, void>()); BOOST_HANA_ASSERT(constant_bool<true, void, void>()); BOOST_HANA_ASSERT(constant_bool<true, void, void, void>()); }
int main() { { constexpr auto xs = hana::to_tuple(hana::range_c<int, 1, 10>); constexpr auto pred = hana::demux(hana::not_)(hana::reverse_partial(hana::mod, hana::int_c<2>)); constexpr auto result = hana::fold(xs, hana::make_tuple(), mpdef::append_if(pred)); constexpr auto expected = hana::tuple_c<int, 2, 4, 6, 8>; BOOST_HANA_CONSTANT_ASSERT(result == expected); } }
int main() { { constexpr auto providers_meta = hana::make_tuple( builder::make_provider_meta_with_map( builder::provider_meta::provider = names::Provider1, builder::provider_meta::name = names::Provider1Name, builder::provider_meta::access_points = access_points_1 ), builder::make_provider_meta_with_map( builder::provider_meta::provider = names::Provider2, builder::provider_meta::name = names::Provider2Name, builder::provider_meta::access_points = access_points_2 ) ); constexpr auto result = nbdl_def::builder::provider_map(entity_map, providers_meta); BOOST_HANA_CONSTANT_ASSERT( result[ hana::make_tuple( builder::path(entity_map, access_points_1[hana::int_c<0>]), builder::path(entity_map, access_points_1[hana::int_c<1>]), names::Provider1Name ) ] == names::Provider1); BOOST_HANA_CONSTANT_ASSERT( result[ hana::make_tuple( builder::path(entity_map, access_points_2[hana::int_c<0>]), names::Provider2Name ) ] == names::Provider2); } }
int main() { // Unsigned integral constants should hash to `unsigned long long` { BOOST_HANA_CONSTANT_ASSERT(hana::equal( hana::hash(hana::integral_c<unsigned char, 10>), hana::type_c<hana::integral_constant<unsigned long long, 10>> )); BOOST_HANA_CONSTANT_ASSERT(hana::equal( hana::hash(hana::integral_c<unsigned short, 10>), hana::type_c<hana::integral_constant<unsigned long long, 10>> )); BOOST_HANA_CONSTANT_ASSERT(hana::equal( hana::hash(hana::integral_c<unsigned int, 10>), hana::type_c<hana::integral_constant<unsigned long long, 10>> )); BOOST_HANA_CONSTANT_ASSERT(hana::equal( hana::hash(hana::integral_c<unsigned long, 10>), hana::type_c<hana::integral_constant<unsigned long long, 10>> )); BOOST_HANA_CONSTANT_ASSERT(hana::equal( hana::hash(hana::integral_c<unsigned long long, 10>), hana::type_c<hana::integral_constant<unsigned long long, 10>> )); } // Signed integral constants should hash to `signed long long` { BOOST_HANA_CONSTANT_ASSERT(hana::equal( hana::hash(hana::integral_c<signed char, 10>), hana::type_c<hana::integral_constant<signed long long, 10>> )); BOOST_HANA_CONSTANT_ASSERT(hana::equal( hana::hash(hana::integral_c<signed short, 10>), hana::type_c<hana::integral_constant<signed long long, 10>> )); BOOST_HANA_CONSTANT_ASSERT(hana::equal( hana::hash(hana::integral_c<signed int, 10>), hana::type_c<hana::integral_constant<signed long long, 10>> )); BOOST_HANA_CONSTANT_ASSERT(hana::equal( hana::hash(hana::integral_c<signed long, 10>), hana::type_c<hana::integral_constant<signed long long, 10>> )); BOOST_HANA_CONSTANT_ASSERT(hana::equal( hana::hash(hana::integral_c<signed long long, 10>), hana::type_c<hana::integral_constant<signed long long, 10>> )); } // `char` should hash to either `signed long long` or `unsigned long long`, // depending on its signedness { using T = std::conditional_t< std::is_signed<char>::value, signed long long, unsigned long long >; BOOST_HANA_CONSTANT_ASSERT(hana::equal( hana::hash(hana::integral_c<char, 10>), hana::type_c<hana::integral_constant<T, 10>> )); } // Pointers to members should hash to themselves. // This test is disabled in pre-C++17, because pointers to non-static // data members can't be used as non-type template arguments before that. // See http://stackoverflow.com/q/35398848/627587. { #if __cplusplus > 201402L struct Foo { int bar; }; constexpr auto x = hana::integral_constant<int Foo::*, &Foo::bar>{}; BOOST_HANA_CONSTANT_ASSERT(hana::equal( hana::hash(x), hana::type_c<hana::integral_constant<int Foo::*, &Foo::bar>> )); #endif } // Booleans should hash to themselves { BOOST_HANA_CONSTANT_ASSERT(hana::equal( hana::hash(hana::true_c), hana::type_c<hana::true_> )); BOOST_HANA_CONSTANT_ASSERT(hana::equal( hana::hash(hana::false_c), hana::type_c<hana::false_> )); } }