// Copyright 2017, 2022 Peter Dimov. // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt #if defined(__clang__) # pragma clang diagnostic ignored "-Wmismatched-tags" #endif #include #include #include #include #include struct X { }; #if !defined(BOOST_NO_CXX11_HDR_TUPLE) #include namespace user { struct Y { int a; int b; }; template int& get( Y& v ); template int const& get( Y const& v ); template<> int& get<0>( Y& v ) { return v.a; } template<> int const& get<0>( Y const& v ) { return v.a; } template<> int& get<1>( Y& v ) { return v.b; } template<> int const& get<1>( Y const& v ) { return v.b; } } // namespace user namespace std { template<> struct tuple_size: std::integral_constant { }; } // namespace std #endif // #if !defined(BOOST_NO_CXX11_HDR_TUPLE) int main() { using boost::container_hash::is_tuple_like; BOOST_TEST_TRAIT_FALSE((is_tuple_like)); BOOST_TEST_TRAIT_FALSE((is_tuple_like)); BOOST_TEST_TRAIT_FALSE((is_tuple_like)); BOOST_TEST_TRAIT_FALSE((is_tuple_like)); BOOST_TEST_TRAIT_FALSE((is_tuple_like)); BOOST_TEST_TRAIT_FALSE((is_tuple_like)); BOOST_TEST_TRAIT_FALSE((is_tuple_like)); BOOST_TEST_TRAIT_FALSE((is_tuple_like)); #if !defined(BOOST_NO_CXX11_HDR_TUPLE) && !BOOST_WORKAROUND(BOOST_MSVC, <= 1800) BOOST_TEST_TRAIT_TRUE((is_tuple_like< std::pair >)); BOOST_TEST_TRAIT_TRUE((is_tuple_like< std::pair const>)); BOOST_TEST_TRAIT_TRUE((is_tuple_like< std::tuple<> >)); BOOST_TEST_TRAIT_TRUE((is_tuple_like< std::tuple<> const>)); BOOST_TEST_TRAIT_TRUE((is_tuple_like< std::tuple >)); BOOST_TEST_TRAIT_TRUE((is_tuple_like< std::tuple const>)); BOOST_TEST_TRAIT_TRUE((is_tuple_like< std::tuple >)); BOOST_TEST_TRAIT_TRUE((is_tuple_like< std::tuple const>)); BOOST_TEST_TRAIT_TRUE((is_tuple_like< std::tuple >)); BOOST_TEST_TRAIT_TRUE((is_tuple_like< std::tuple const>)); BOOST_TEST_TRAIT_TRUE((is_tuple_like)); BOOST_TEST_TRAIT_TRUE((is_tuple_like)); #endif return boost::report_errors(); }