From cf3ea64b455e22009446f0d7cf6ca61683ee69e4 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Thu, 21 Feb 2019 21:57:39 +0200 Subject: [PATCH] Add reference specializations to variant_size --- include/boost/variant2/variant.hpp | 8 ++++++ test/variant_size.cpp | 40 ++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/include/boost/variant2/variant.hpp b/include/boost/variant2/variant.hpp index 7050f98..2d41583 100644 --- a/include/boost/variant2/variant.hpp +++ b/include/boost/variant2/variant.hpp @@ -83,6 +83,14 @@ template struct variant_size: variant_size { }; +template struct variant_size: variant_size +{ +}; + +template struct variant_size: variant_size +{ +}; + #if !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES) template /*inline*/ constexpr std::size_t variant_size_v = variant_size::value; diff --git a/test/variant_size.cpp b/test/variant_size.cpp index b348418..81e63ac 100644 --- a/test/variant_size.cpp +++ b/test/variant_size.cpp @@ -25,40 +25,80 @@ int main() BOOST_TEST_EQ( (variant_size volatile>::value), 0 ); BOOST_TEST_EQ( (variant_size const volatile>::value), 0 ); + BOOST_TEST_EQ( (variant_size&>::value), 0 ); + BOOST_TEST_EQ( (variant_size const&>::value), 0 ); + BOOST_TEST_EQ( (variant_size&&>::value), 0 ); + BOOST_TEST_EQ( (variant_size const&&>::value), 0 ); + BOOST_TEST_EQ( (variant_size>::value), 1 ); BOOST_TEST_EQ( (variant_size const>::value), 1 ); BOOST_TEST_EQ( (variant_size volatile>::value), 1 ); BOOST_TEST_EQ( (variant_size const volatile>::value), 1 ); + BOOST_TEST_EQ( (variant_size&>::value), 1 ); + BOOST_TEST_EQ( (variant_size const&>::value), 1 ); + BOOST_TEST_EQ( (variant_size&&>::value), 1 ); + BOOST_TEST_EQ( (variant_size const&&>::value), 1 ); + BOOST_TEST_EQ( (variant_size>::value), 2 ); BOOST_TEST_EQ( (variant_size const>::value), 2 ); BOOST_TEST_EQ( (variant_size volatile>::value), 2 ); BOOST_TEST_EQ( (variant_size const volatile>::value), 2 ); + BOOST_TEST_EQ( (variant_size&>::value), 2 ); + BOOST_TEST_EQ( (variant_size const&>::value), 2 ); + BOOST_TEST_EQ( (variant_size&&>::value), 2 ); + BOOST_TEST_EQ( (variant_size const&&>::value), 2 ); + BOOST_TEST_EQ( (variant_size>::value), 3 ); BOOST_TEST_EQ( (variant_size const>::value), 3 ); BOOST_TEST_EQ( (variant_size volatile>::value), 3 ); BOOST_TEST_EQ( (variant_size const volatile>::value), 3 ); + BOOST_TEST_EQ( (variant_size&>::value), 3 ); + BOOST_TEST_EQ( (variant_size const&>::value), 3 ); + BOOST_TEST_EQ( (variant_size&&>::value), 3 ); + BOOST_TEST_EQ( (variant_size const&&>::value), 3 ); + BOOST_TEST_EQ( (variant_size>::value), 4 ); BOOST_TEST_EQ( (variant_size const>::value), 4 ); BOOST_TEST_EQ( (variant_size volatile>::value), 4 ); BOOST_TEST_EQ( (variant_size const volatile>::value), 4 ); + BOOST_TEST_EQ( (variant_size&>::value), 4 ); + BOOST_TEST_EQ( (variant_size const&>::value), 4 ); + BOOST_TEST_EQ( (variant_size&&>::value), 4 ); + BOOST_TEST_EQ( (variant_size const&&>::value), 4 ); + variant_size(); variant_size(); variant_size(); variant_size(); + variant_size(); + variant_size(); + variant_size(); + variant_size(); + BOOST_TEST_TRAIT_FALSE((mp_valid)); BOOST_TEST_TRAIT_FALSE((mp_valid)); BOOST_TEST_TRAIT_FALSE((mp_valid)); BOOST_TEST_TRAIT_FALSE((mp_valid)); + BOOST_TEST_TRAIT_FALSE((mp_valid)); + BOOST_TEST_TRAIT_FALSE((mp_valid)); + BOOST_TEST_TRAIT_FALSE((mp_valid)); + BOOST_TEST_TRAIT_FALSE((mp_valid)); + BOOST_TEST_TRAIT_TRUE((mp_valid>)); BOOST_TEST_TRAIT_TRUE((mp_valid const>)); BOOST_TEST_TRAIT_TRUE((mp_valid volatile>)); BOOST_TEST_TRAIT_TRUE((mp_valid const volatile>)); + BOOST_TEST_TRAIT_TRUE((mp_valid&>)); + BOOST_TEST_TRAIT_TRUE((mp_valid const&>)); + BOOST_TEST_TRAIT_TRUE((mp_valid&&>)); + BOOST_TEST_TRAIT_TRUE((mp_valid const&&>)); + return boost::report_errors(); }