📄 value_at.hpp
字号:
/*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 2001-2006 Joel de Guzman 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 <boost/detail/lightweight_test.hpp>#include <boost/fusion/sequence/intrinsic/at.hpp>#include <boost/fusion/sequence/intrinsic/value_at.hpp>#include <boost/static_assert.hpp>#include <iostream>#if !defined(FUSION_AT)#define FUSION_AT at_c#endif#if !defined(FUSION_VALUE_AT)#define FUSION_VALUE_AT(S, N) result_of::value_at_c<S, N>#endifnamespace test_detail{ // something to prevent warnings for unused variables template<class T> void dummy(const T&) {} class A {};}voidtest(){ using namespace boost::fusion; using namespace test_detail; double d = 2.7; A a; FUSION_SEQUENCE<int, double&, const A&, int> t(1, d, a, 2); const FUSION_SEQUENCE<int, double&, const A, int> ct(t); int i = FUSION_AT<0>(t); int i2 = FUSION_AT<3>(t); BOOST_TEST(i == 1 && i2 == 2); int j = FUSION_AT<0>(ct); BOOST_TEST(j == 1); FUSION_AT<0>(t) = 5; BOOST_TEST(FUSION_AT<0>(t) == 5);#if defined(FUSION_TEST_FAIL) FUSION_AT<0>(ct) = 5; // can't assign to const#endif double e = FUSION_AT<1>(t); BOOST_TEST(e > 2.69 && e < 2.71); FUSION_AT<1>(t) = 3.14+i; BOOST_TEST(FUSION_AT<1>(t) > 4.13 && FUSION_AT<1>(t) < 4.15);#if defined(FUSION_TEST_FAIL) FUSION_AT<4>(t) = A(); // can't assign to const dummy(FUSION_AT<5>(ct)); // illegal index#endif ++FUSION_AT<0>(t); BOOST_TEST(FUSION_AT<0>(t) == 6); typedef FUSION_SEQUENCE<int, float> seq_type; BOOST_STATIC_ASSERT(!( boost::is_const<FUSION_VALUE_AT(seq_type, 0)::type>::value)); // constness should not affect BOOST_STATIC_ASSERT(!( boost::is_const<FUSION_VALUE_AT(const seq_type, 0)::type>::value)); BOOST_STATIC_ASSERT(!( boost::is_const<FUSION_VALUE_AT(seq_type, 1)::type>::value)); // constness should not affect BOOST_STATIC_ASSERT(!( boost::is_const<FUSION_VALUE_AT(const seq_type, 1)::type>::value)); dummy(i); dummy(i2); dummy(j); dummy(e); // avoid warns for unused variables}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -