mirror of
https://github.com/boostorg/range.git
synced 2026-01-24 16:02:22 +01:00
iterator_range interop with variant.
This commit is contained in:
60
test/iterator_range_variant.cpp
Normal file
60
test/iterator_range_variant.cpp
Normal file
@@ -0,0 +1,60 @@
|
||||
// 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;
|
||||
}
|
||||
Reference in New Issue
Block a user