diff --git a/include/boost/variant2/variant.hpp b/include/boost/variant2/variant.hpp index 9f1f517..0f14659 100644 --- a/include/boost/variant2/variant.hpp +++ b/include/boost/variant2/variant.hpp @@ -2263,6 +2263,13 @@ template struct is_output_streamable +std::basic_ostream& operator<<( std::basic_ostream& os, monostate const& ) +{ + os << "monostate"; + return os; +} + template, T>... >::value >::type > std::basic_ostream& operator<<( std::basic_ostream& os, variant const& v ) diff --git a/test/is_output_streamable.cpp b/test/is_output_streamable.cpp index 6d0f0a2..1b0f2fe 100644 --- a/test/is_output_streamable.cpp +++ b/test/is_output_streamable.cpp @@ -30,9 +30,12 @@ int main() BOOST_TEST_TRAIT_FALSE((boost::variant2::detail::is_output_streamable)); BOOST_TEST_TRAIT_TRUE((boost::variant2::detail::is_output_streamable)); + BOOST_TEST_TRAIT_TRUE((boost::variant2::detail::is_output_streamable)); + BOOST_TEST_TRAIT_TRUE((boost::variant2::detail::is_output_streamable>)); BOOST_TEST_TRAIT_FALSE((boost::variant2::detail::is_output_streamable>)); BOOST_TEST_TRAIT_TRUE((boost::variant2::detail::is_output_streamable>)); + BOOST_TEST_TRAIT_TRUE((boost::variant2::detail::is_output_streamable>)); return boost::report_errors(); } diff --git a/test/variant_ostream_insert.cpp b/test/variant_ostream_insert.cpp index 34fda07..fca7fe6 100644 --- a/test/variant_ostream_insert.cpp +++ b/test/variant_ostream_insert.cpp @@ -20,17 +20,24 @@ template std::string to_string( T const& t ) int main() { - variant v( 1 ); + { + BOOST_TEST_EQ( to_string( monostate() ), "monostate" ); + } - BOOST_TEST_EQ( to_string( v ), to_string( 1 ) ); + { + variant v; - v = 3.14f; + BOOST_TEST_EQ( to_string( v ), to_string( monostate() ) ); - BOOST_TEST_EQ( to_string( v ), to_string( 3.14f ) ); + v = 1; + BOOST_TEST_EQ( to_string( v ), to_string( 1 ) ); - v = "test"; + v = 3.14f; + BOOST_TEST_EQ( to_string( v ), to_string( 3.14f ) ); - BOOST_TEST_EQ( to_string( v ), to_string( "test" ) ); + v = "test"; + BOOST_TEST_EQ( to_string( v ), to_string( "test" ) ); + } return boost::report_errors(); }