📄 make.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/comparison/equal_to.hpp>#include <string>#if !defined(FUSION_AT)#define FUSION_AT at_c#endif#if !defined(FUSION_MAKE)#define FUSION_MAKE BOOST_PP_CAT(make_, FUSION_SEQUENCE)#endifnamespace test_detail{ // something to prevent warnings for unused variables template<class T> void dummy(const T&) {} class A {}; class B {};}void make_tuple_test() {}voidtest(){ using namespace boost::fusion; using namespace test_detail; { FUSION_SEQUENCE<int, char> t1 = FUSION_MAKE(5, 'a'); BOOST_TEST(FUSION_AT<0>(t1) == 5); BOOST_TEST(FUSION_AT<1>(t1) == 'a'); FUSION_SEQUENCE<int, std::string> t2; t2 = FUSION_MAKE((short int)2, std::string("Hi")); BOOST_TEST(FUSION_AT<0>(t2) == 2); BOOST_TEST(FUSION_AT<1>(t2) == "Hi"); } { // This test was previously disallowed for non-PTS compilers. A a = A(); B b; const A ca = a; FUSION_MAKE(boost::cref(a), b); FUSION_MAKE(boost::ref(a), b); FUSION_MAKE(boost::ref(a), boost::cref(b)); FUSION_MAKE(boost::ref(ca)); } { // the result of make_xxx is assignable: BOOST_TEST(FUSION_MAKE(2, 4, 6) == (FUSION_MAKE(1, 2, 3) = FUSION_MAKE(2, 4, 6))); } { // This test was previously disallowed for non-PTS compilers. FUSION_MAKE("Donald", "Daisy"); // should work; // std::make_pair("Doesn't","Work"); // fails } { // You can store a reference to a function in a sequence FUSION_SEQUENCE<void(&)()> adf(make_tuple_test); dummy(adf); // avoid warning for unused variable }#if defined(FUSION_TEST_FAIL) { // But make_xxx doesn't work // with function references, since it creates a const // qualified function type FUSION_MAKE(make_tuple_test); }#endif { // With function pointers, make_xxx works just fine FUSION_MAKE(&make_tuple_test); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -