basics.hpp

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

HPP
113
字号
// Copyright David Abrahams, Daniel Wallin 2005. Use, modification and // distribution is subject to 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)#ifndef BASICS_050424_HPP#define BASICS_050424_HPP#include <boost/parameter/keyword.hpp>#include <boost/parameter/parameters.hpp>#include <boost/type_traits/is_same.hpp>#include <boost/assert.hpp>#include <boost/mpl/assert.hpp>#include <cstring>#include <boost/detail/lightweight_test.hpp>namespace test {BOOST_PARAMETER_KEYWORD(tag, name)BOOST_PARAMETER_KEYWORD(tag, value)BOOST_PARAMETER_KEYWORD(tag, index)BOOST_PARAMETER_KEYWORD(tag, tester)using namespace boost::parameter;struct f_parameters // vc6 is happier with inheritance than with a typedef  : parameters<        tag::tester      , tag::name      , tag::value      , tag::index    >{};inline double value_default(){    return 666.222;}template <class T>inline bool equal(T const& x, T const& y){    return x == y;}inline bool equal(char const* s1, char const* s2){    using namespace std;    return !strcmp(s1,s2);}#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))inline bool equal(char* s1, char* s2){    using namespace std;    return !strcmp(s1,s2);}#endif template <class Name, class Value, class Index>struct values_t{    values_t(Name const& n, Value const& v, Index const& i)      : n(n), v(v), i(i)    {}    template <class Name_, class Value_, class Index_>    void operator()(Name_ const& n_, Value_ const& v_, Index_ const& i_) const    {        // Only VC and its emulators fail this; they seem to have        // problems with deducing the constness of string literal        // arrays.#if defined(_MSC_VER)                                                   \        && (BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 700)           \            || BOOST_WORKAROUND(BOOST_MSVC, < 1310))                    \            || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))# else         BOOST_MPL_ASSERT((boost::is_same<Index,Index_>));        BOOST_MPL_ASSERT((boost::is_same<Value,Value_>));        BOOST_MPL_ASSERT((boost::is_same<Name,Name_>));#endif        BOOST_TEST(equal(n, n_));        BOOST_TEST(equal(v, v_));        BOOST_TEST(equal(i, i_));    }    Name const& n;    Value const& v;    Index const& i;};template <class Name, class Value, class Index>inline values_t<Name,Value,Index>values(Name const& n, Value const& v, Index const& i){    return values_t<Name,Value,Index>(n,v,i);}} // namespace test// GCC2 has a problem with char (&)[] deduction, so we'll cast string// literals there.#undef S#if BOOST_WORKAROUND(__GNUC__, == 2) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))# define S(s) (char const*)s#else# define S(s) s#endif#endif // BASICS_050424_HPP

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?