// Boost.Range library // // Copyright Neil Groves 2014. Use, modification and // distribution is subject to 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) // // For more information, see http://www.boost.org/libs/range/ // #include <boost/detail/workaround.hpp> #include <boost/range/iterator_range.hpp> #include <boost/range/functions.hpp> #include <boost/range/as_literal.hpp> #include <boost/variant.hpp> #include <boost/mpl/vector.hpp> #include <boost/test/test_tools.hpp> #include <boost/test/unit_test.hpp> #include <string> namespace { enum E { e1, e2, e3 }; void test_variant_report() { typedef boost::mpl::vector< E, std::string, boost::iterator_range<std::string::iterator> >::type args; typedef boost::make_variant_over<args>::type variant_t; variant_t v; std::string s; v = boost::iterator_range<std::string::iterator>(s.begin(), s.end()); v = e2; v = std::string(); // Rationale: // This is cast to const char* to guard against ambiguity in the case // where std::string::iterator it a char* v = static_cast<const char*>(""); } } boost::unit_test::test_suite* init_unit_test_suite( int argc, char* argv[] ) { boost::unit_test::test_suite* test = BOOST_TEST_SUITE("iterator range and variant interoperability"); test->add(BOOST_TEST_CASE(&test_variant_report)); return test; }