// Copyright 2017 Peter Dimov. // // Distributed under the Boost Software License, Version 1.0. // // See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt #include #include #include #include #include #include using namespace boost::variant2; using namespace boost::mp11; template using var_alt_t = variant_alternative_t; int main() { BOOST_TEST_TRAIT_TRUE((std::is_same>, void>)); BOOST_TEST_TRAIT_TRUE((std::is_same const>, void const>)); BOOST_TEST_TRAIT_TRUE((std::is_same volatile>, void volatile>)); BOOST_TEST_TRAIT_TRUE((std::is_same const volatile>, void const volatile>)); BOOST_TEST_TRAIT_TRUE((std::is_same&>, char&>)); BOOST_TEST_TRAIT_TRUE((std::is_same const&>, char const&>)); BOOST_TEST_TRAIT_TRUE((std::is_same&&>, char&&>)); BOOST_TEST_TRAIT_TRUE((std::is_same const&&>, char const&&>)); BOOST_TEST_TRAIT_TRUE((std::is_same>, void>)); BOOST_TEST_TRAIT_TRUE((std::is_same const>, void const>)); BOOST_TEST_TRAIT_TRUE((std::is_same volatile>, void volatile>)); BOOST_TEST_TRAIT_TRUE((std::is_same const volatile>, void const volatile>)); BOOST_TEST_TRAIT_TRUE((std::is_same&>, char&>)); BOOST_TEST_TRAIT_TRUE((std::is_same const&>, char const&>)); BOOST_TEST_TRAIT_TRUE((std::is_same&&>, char&&>)); BOOST_TEST_TRAIT_TRUE((std::is_same const&&>, char const&&>)); BOOST_TEST_TRAIT_TRUE((std::is_same>, int>)); BOOST_TEST_TRAIT_TRUE((std::is_same const>, int const>)); BOOST_TEST_TRAIT_TRUE((std::is_same volatile>, int volatile>)); BOOST_TEST_TRAIT_TRUE((std::is_same const volatile>, int const volatile>)); BOOST_TEST_TRAIT_TRUE((std::is_same&>, int&>)); BOOST_TEST_TRAIT_TRUE((std::is_same const&>, int const&>)); BOOST_TEST_TRAIT_TRUE((std::is_same&&>, int&&>)); BOOST_TEST_TRAIT_TRUE((std::is_same const&&>, int const&&>)); BOOST_TEST_TRAIT_TRUE((std::is_same>, void>)); BOOST_TEST_TRAIT_TRUE((std::is_same const>, void const>)); BOOST_TEST_TRAIT_TRUE((std::is_same volatile>, void volatile>)); BOOST_TEST_TRAIT_TRUE((std::is_same const volatile>, void const volatile>)); BOOST_TEST_TRAIT_TRUE((std::is_same&>, char&>)); BOOST_TEST_TRAIT_TRUE((std::is_same const&>, char const&>)); BOOST_TEST_TRAIT_TRUE((std::is_same&&>, char&&>)); BOOST_TEST_TRAIT_TRUE((std::is_same const&&>, char const&&>)); BOOST_TEST_TRAIT_TRUE((std::is_same>, int>)); BOOST_TEST_TRAIT_TRUE((std::is_same const>, int const>)); BOOST_TEST_TRAIT_TRUE((std::is_same volatile>, int volatile>)); BOOST_TEST_TRAIT_TRUE((std::is_same const volatile>, int const volatile>)); BOOST_TEST_TRAIT_TRUE((std::is_same&>, int&>)); BOOST_TEST_TRAIT_TRUE((std::is_same const&>, int const&>)); BOOST_TEST_TRAIT_TRUE((std::is_same&&>, int&&>)); BOOST_TEST_TRAIT_TRUE((std::is_same const&&>, int const&&>)); BOOST_TEST_TRAIT_TRUE((std::is_same>, float>)); BOOST_TEST_TRAIT_TRUE((std::is_same const>, float const>)); BOOST_TEST_TRAIT_TRUE((std::is_same volatile>, float volatile>)); BOOST_TEST_TRAIT_TRUE((std::is_same const volatile>, float const volatile>)); BOOST_TEST_TRAIT_TRUE((std::is_same&>, float&>)); BOOST_TEST_TRAIT_TRUE((std::is_same const&>, float const&>)); BOOST_TEST_TRAIT_TRUE((std::is_same&&>, float&&>)); BOOST_TEST_TRAIT_TRUE((std::is_same const&&>, float const&&>)); variant_alternative<0, void>(); variant_alternative<0, void const>(); variant_alternative<0, void volatile>(); variant_alternative<0, void const volatile>(); variant_alternative<0, int&>(); variant_alternative<0, int const&>(); variant_alternative<0, int&&>(); variant_alternative<0, int const&&>(); variant_alternative<0, variant<>>(); variant_alternative<0, variant<> const>(); variant_alternative<0, variant<> volatile>(); variant_alternative<0, variant<> const volatile>(); variant_alternative<0, variant<>&>(); variant_alternative<0, variant<> const&>(); variant_alternative<0, variant<>&&>(); variant_alternative<0, variant<> const&&>(); variant_alternative<1, variant>(); variant_alternative<1, variant const>(); variant_alternative<1, variant volatile>(); variant_alternative<1, variant const volatile>(); variant_alternative<1, variant&>(); variant_alternative<1, variant const&>(); variant_alternative<1, variant&&>(); variant_alternative<1, variant const&&>(); BOOST_TEST_TRAIT_FALSE((mp_valid, void>)); BOOST_TEST_TRAIT_FALSE((mp_valid, void const>)); BOOST_TEST_TRAIT_FALSE((mp_valid, void volatile>)); BOOST_TEST_TRAIT_FALSE((mp_valid, void const volatile>)); BOOST_TEST_TRAIT_FALSE((mp_valid, int&>)); BOOST_TEST_TRAIT_FALSE((mp_valid, int const&>)); BOOST_TEST_TRAIT_FALSE((mp_valid, int&&>)); BOOST_TEST_TRAIT_FALSE((mp_valid, int const&&>)); BOOST_TEST_TRAIT_FALSE((mp_valid, variant<>>)); BOOST_TEST_TRAIT_FALSE((mp_valid, variant<> const>)); BOOST_TEST_TRAIT_FALSE((mp_valid, variant<> volatile>)); BOOST_TEST_TRAIT_FALSE((mp_valid, variant<> const volatile>)); BOOST_TEST_TRAIT_FALSE((mp_valid, variant<>&>)); BOOST_TEST_TRAIT_FALSE((mp_valid, variant<> const&>)); BOOST_TEST_TRAIT_FALSE((mp_valid, variant<>&&>)); BOOST_TEST_TRAIT_FALSE((mp_valid, variant<> const&&>)); BOOST_TEST_TRAIT_TRUE((mp_valid, variant>)); BOOST_TEST_TRAIT_TRUE((mp_valid, variant const>)); BOOST_TEST_TRAIT_TRUE((mp_valid, variant volatile>)); BOOST_TEST_TRAIT_TRUE((mp_valid, variant const volatile>)); BOOST_TEST_TRAIT_TRUE((mp_valid, variant&>)); BOOST_TEST_TRAIT_TRUE((mp_valid, variant const&>)); BOOST_TEST_TRAIT_TRUE((mp_valid, variant&&>)); BOOST_TEST_TRAIT_TRUE((mp_valid, variant const&&>)); BOOST_TEST_TRAIT_FALSE((mp_valid, variant>)); BOOST_TEST_TRAIT_FALSE((mp_valid, variant const>)); BOOST_TEST_TRAIT_FALSE((mp_valid, variant volatile>)); BOOST_TEST_TRAIT_FALSE((mp_valid, variant const volatile>)); BOOST_TEST_TRAIT_FALSE((mp_valid, variant&>)); BOOST_TEST_TRAIT_FALSE((mp_valid, variant const&>)); BOOST_TEST_TRAIT_FALSE((mp_valid, variant&&>)); BOOST_TEST_TRAIT_FALSE((mp_valid, variant const&&>)); return boost::report_errors(); }