value_at.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 88 行

HPP
88
字号
/*=============================================================================    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 + =
减小字号Ctrl + -
显示快捷键?