// Copyright Louis Dionne 2013-2017 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) #include #include #include namespace hana = boost::hana; template struct test { static_assert(std::is_same, ExpectedDatatype>::value, ""); static_assert(std::is_same, ExpectedDatatype>::value, ""); static_assert(std::is_same, ExpectedDatatype>::value, ""); static_assert(std::is_same, ExpectedDatatype>::value, ""); static_assert(std::is_same, ExpectedDatatype>::value, ""); static_assert(std::is_same, ExpectedDatatype>::value, ""); static_assert(std::is_same, ExpectedDatatype>::value, ""); static_assert(std::is_same, ExpectedDatatype>::value, ""); static_assert(std::is_same, ExpectedDatatype>::value, ""); static_assert(std::is_same, ExpectedDatatype>::value, ""); static_assert(std::is_same, ExpectedDatatype>::value, ""); static_assert(std::is_same, ExpectedDatatype>::value, ""); }; struct NestedDatatype; struct Nested { struct hana_tag; }; template struct test; struct NoNestedDatatype { }; template struct test; struct NoNestedHana { }; template struct test; struct FullySpecializedDatatype; struct FullySpecialized; namespace boost { namespace hana { template <> struct tag_of { using type = FullySpecializedDatatype; }; }} template struct test; struct PartiallySpecializedDatatype; template struct PartiallySpecialized; namespace boost { namespace hana { template struct tag_of> { using type = PartiallySpecializedDatatype; }; }} template struct test, PartiallySpecializedDatatype>; struct PredicatedDatatype; struct Predicated { static constexpr bool predicate = true; }; namespace boost { namespace hana { template struct tag_of> { using type = PredicatedDatatype; }; }} template struct test; int main() { }