/*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under 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) ==============================================================================*/ #include #include #include #include #include #include #include #include #include #include #include #include #include struct k1 {}; struct k2 {}; struct k3 {}; struct k4 {}; namespace test_detail { // classes with different kinds of conversions class AA {}; class BB : public AA {}; struct CC { CC() {} CC(const BB&) {} }; struct DD { operator CC() const { return CC(); }; }; } boost::fusion::map< boost::fusion::pair, boost::fusion::pair, boost::fusion::pair, boost::fusion::pair > foo(int i) { return boost::fusion::make_map(i, i+1, i+2, i+3); } void test() { using namespace boost::fusion; using namespace test_detail; map, pair > t1(4, 'a'); map, pair > t2(5, 'b'); t2 = t1; BOOST_TEST(at_c<0>(t1).second == at_c<0>(t2).second); BOOST_TEST(at_c<1>(t1).second == at_c<1>(t2).second); map, pair > t4(4, "a"); map, pair > t3(2, std::string("a")); t3 = t4; BOOST_TEST((double)at_c<0>(t4).second == at_c<0>(t3).second); BOOST_TEST(at_c<1>(t4).second == at_c<1>(t3).second); // testing copy and assignment with implicit conversions // between elements testing tie map, pair, pair, pair > t; map, pair, pair, pair > a(t); a = t; int i; char c; double d; map_tie(i, c, d) = make_map(1, 'a', 5.5); BOOST_TEST(i==1); BOOST_TEST(c=='a'); BOOST_TEST(d>5.4 && d<5.6); // returning a map with conversion foo(2); } int main() { test(); return boost::report_errors(); }