/*============================================================================= Copyright (c) 2018 Kohei Takahashi 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 template void test_at() { Sequence seq; // zero initialized BOOST_TEST(boost::fusion::at_c<0>(seq)[0] == 0); BOOST_TEST(boost::fusion::at_c<0>(seq)[1] == 0); BOOST_TEST(boost::fusion::at_c<0>(seq)[2] == 0); int (&arr)[3] = boost::fusion::deref(boost::fusion::begin(seq)); arr[0] = 2; arr[1] = 4; arr[2] = 6; BOOST_TEST(boost::fusion::at_c<0>(seq)[0] == 2); BOOST_TEST(boost::fusion::at_c<0>(seq)[1] == 4); BOOST_TEST(boost::fusion::at_c<0>(seq)[2] == 6); boost::fusion::at_c<0>(seq)[1] = 42; BOOST_TEST(boost::fusion::at_c<0>(seq)[0] == 2); BOOST_TEST(boost::fusion::at_c<0>(seq)[1] == 42); BOOST_TEST(boost::fusion::at_c<0>(seq)[2] == 6); } template inline T& value(T& v) { return v; } template inline T& value(boost::fusion::pair& v) { return v.second; } template void test_at_key() { Sequence seq; // zero initialized BOOST_TEST(boost::fusion::at_key(seq)[0] == 0); BOOST_TEST(boost::fusion::at_key(seq)[1] == 0); BOOST_TEST(boost::fusion::at_key(seq)[2] == 0); int (&arr)[3] = value(boost::fusion::deref(boost::fusion::begin(seq))); arr[0] = 2; arr[1] = 4; arr[2] = 6; BOOST_TEST(boost::fusion::at_key(seq)[0] == 2); BOOST_TEST(boost::fusion::at_key(seq)[1] == 4); BOOST_TEST(boost::fusion::at_key(seq)[2] == 6); boost::fusion::at_key(seq)[1] = 42; BOOST_TEST(boost::fusion::at_key(seq)[0] == 2); BOOST_TEST(boost::fusion::at_key(seq)[1] == 42); BOOST_TEST(boost::fusion::at_key(seq)[2] == 6); } int main() { using namespace boost::fusion; test_at >(); test_at >(); test_at >(); test_at >(); #if !BOOST_WORKAROUND(BOOST_GCC, / 100 == 406) || defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS) // FIXME: gcc 4.6 w/ c++0x doesn't like set with array... test_at_key >(); #endif test_at_key > >(); return boost::report_errors(); }