diff options
Diffstat (limited to 'src/third_party/boost-1.56.0/boost/parameter')
17 files changed, 0 insertions, 2398 deletions
diff --git a/src/third_party/boost-1.56.0/boost/parameter/aux_/arg_list.hpp b/src/third_party/boost-1.56.0/boost/parameter/aux_/arg_list.hpp deleted file mode 100644 index ed3929d5bfa..00000000000 --- a/src/third_party/boost-1.56.0/boost/parameter/aux_/arg_list.hpp +++ /dev/null @@ -1,459 +0,0 @@ -// Copyright Daniel Wallin, David Abrahams 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 ARG_LIST_050329_HPP -#define ARG_LIST_050329_HPP - -#include <boost/parameter/aux_/void.hpp> -#include <boost/parameter/aux_/result_of0.hpp> -#include <boost/parameter/aux_/default.hpp> -#include <boost/parameter/aux_/parameter_requirements.hpp> -#include <boost/parameter/aux_/yesno.hpp> -#include <boost/parameter/aux_/is_maybe.hpp> -#include <boost/parameter/config.hpp> - -#include <boost/mpl/apply.hpp> -#include <boost/mpl/assert.hpp> -#include <boost/mpl/begin.hpp> -#include <boost/mpl/end.hpp> -#include <boost/mpl/iterator_tags.hpp> - -#include <boost/type_traits/add_reference.hpp> -#include <boost/type_traits/is_same.hpp> -#include <boost/preprocessor/repetition/enum_params.hpp> -#include <boost/preprocessor/repetition/enum_binary_params.hpp> -#include <boost/preprocessor/facilities/intercept.hpp> - -namespace boost { namespace parameter { - -// Forward declaration for aux::arg_list, below. -template<class T> struct keyword; - -namespace aux { - -// Tag type passed to MPL lambda. -struct lambda_tag; - -// -// Structures used to build the tuple of actual arguments. The -// tuple is a nested cons-style list of arg_list specializations -// terminated by an empty_arg_list. -// -// Each specialization of arg_list is derived from its successor in -// the list type. This feature is used along with using -// declarations to build member function overload sets that can -// match against keywords. -// - -// MPL sequence support -struct arg_list_tag; - -// Terminates arg_list<> and represents an empty list. Since this -// is just the terminating case you might want to look at arg_list -// first, to get a feel for what's really happening here. - -struct empty_arg_list -{ - empty_arg_list() {} - - // Constructor taking BOOST_PARAMETER_MAX_ARITY empty_arg_list - // arguments; this makes initialization - empty_arg_list( - BOOST_PP_ENUM_PARAMS( - BOOST_PARAMETER_MAX_ARITY, void_ BOOST_PP_INTERCEPT - )) - {} - - // A metafunction class that, given a keyword and a default - // type, returns the appropriate result type for a keyword - // lookup given that default - struct binding - { - template<class KW, class Default, class Reference> - struct apply - { - typedef Default type; - }; - }; - -#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) - // Terminator for has_key, indicating that the keyword is unique - template <class KW> - static no_tag has_key(KW*); -#endif - -#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \ - || (BOOST_WORKAROUND(__GNUC__, < 3)) \ - || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - - // The overload set technique doesn't work with these older - // compilers, so they need some explicit handholding. - - // A metafunction class that, given a keyword, returns the type - // of the base sublist whose get() function can produce the - // value for that key - struct key_owner - { - template<class KW> - struct apply - { - typedef empty_arg_list type; - }; - }; - - template <class K, class T> - T& get(default_<K,T> x) const - { - return x.value; - } - - template <class K, class F> - typename result_of0<F>::type - get(lazy_default<K,F> x) const - { - return x.compute_default(); - } -#endif - - // If this function is called, it means there is no argument - // in the list that matches the supplied keyword. Just return - // the default value. - template <class K, class Default> - Default& operator[](default_<K, Default> x) const - { - return x.value; - } - - // If this function is called, it means there is no argument - // in the list that matches the supplied keyword. Just evaluate - // and return the default value. - template <class K, class F> - typename result_of0<F>::type - operator[]( - BOOST_PARAMETER_lazy_default_fallback<K,F> x) const - { - return x.compute_default(); - } - - // No argument corresponding to ParameterRequirements::key_type - // was found if we match this overload, so unless that parameter - // has a default, we indicate that the actual arguments don't - // match the function's requirements. - template <class ParameterRequirements, class ArgPack> - static typename ParameterRequirements::has_default - satisfies(ParameterRequirements*, ArgPack*); - - // MPL sequence support - typedef empty_arg_list type; // convenience - typedef arg_list_tag tag; // For dispatching to sequence intrinsics -}; - -#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) -template<class KW> -no_tag operator*(empty_arg_list, KW*); -#endif - -// Forward declaration for arg_list::operator, -template <class KW, class T> -struct tagged_argument; - -template <class T> -struct get_reference -{ - typedef typename T::reference type; -}; - -// A tuple of tagged arguments, terminated with empty_arg_list. -// Every TaggedArg is an instance of tagged_argument<>. -template <class TaggedArg, class Next = empty_arg_list> -struct arg_list : Next -{ - typedef arg_list<TaggedArg,Next> self; - typedef typename TaggedArg::key_type key_type; - - typedef typename is_maybe<typename TaggedArg::value_type>::type holds_maybe; - - typedef typename mpl::eval_if< - holds_maybe - , get_reference<typename TaggedArg::value_type> - , get_reference<TaggedArg> - >::type reference; - - typedef typename mpl::if_< - holds_maybe - , reference - , typename TaggedArg::value_type - >::type value_type; - - TaggedArg arg; // Stores the argument - - // Store the arguments in successive nodes of this list - template< // class A0, class A1, ... - BOOST_PP_ENUM_PARAMS(BOOST_PARAMETER_MAX_ARITY, class A) - > - arg_list( // A0& a0, A1& a1, ... - BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PARAMETER_MAX_ARITY, A, & a) - ) - : Next( // a1, a2, ... - BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PARAMETER_MAX_ARITY, a) - , void_reference() - ) - , arg(a0) - {} - - // Create a new list by prepending arg to a copy of tail. Used - // when incrementally building this structure with the comma - // operator. - arg_list(TaggedArg head, Next const& tail) - : Next(tail) - , arg(head) - {} - - // A metafunction class that, given a keyword and a default - // type, returns the appropriate result type for a keyword - // lookup given that default - struct binding - { - template <class KW, class Default, class Reference> - struct apply - { - typedef typename mpl::eval_if< - boost::is_same<KW, key_type> - , mpl::if_<Reference, reference, value_type> - , mpl::apply_wrap3<typename Next::binding, KW, Default, Reference> - >::type type; - }; - }; - -#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && !BOOST_WORKAROUND(__GNUC__, == 2) -# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) - friend yes_tag operator*(arg_list, key_type*); -# define BOOST_PARAMETER_CALL_HAS_KEY(next, key) (*(next*)0 * (key*)0) -# else - // Overload for key_type, so the assert below will fire if the - // same keyword is used again - static yes_tag has_key(key_type*); - using Next::has_key; - -# define BOOST_PARAMETER_CALL_HAS_KEY(next, key) next::has_key((key*)0) -# endif - - BOOST_MPL_ASSERT_MSG( - sizeof(BOOST_PARAMETER_CALL_HAS_KEY(Next,key_type)) == sizeof(no_tag) - , duplicate_keyword, (key_type) - ); - -# undef BOOST_PARAMETER_CALL_HAS_KEY -#endif - // - // Begin implementation of indexing operators for looking up - // specific arguments by name - // - - // Helpers that handle the case when TaggedArg is - // empty<T>. - template <class D> - reference get_default(D const&, mpl::false_) const - { - return arg.value; - } - - template <class D> - reference get_default(D const& d, mpl::true_) const - { - return arg.value ? arg.value.get() : arg.value.construct(d.value); - } - -#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \ - || BOOST_WORKAROUND(__GNUC__, < 3) \ - || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - // These older compilers don't support the overload set creation - // idiom well, so we need to do all the return type calculation - // for the compiler and dispatch through an outer function template - - // A metafunction class that, given a keyword, returns the base - // sublist whose get() function can produce the value for that - // key. - struct key_owner - { - template<class KW> - struct apply - { - typedef typename mpl::eval_if< - boost::is_same<KW, key_type> - , mpl::identity<arg_list<TaggedArg,Next> > - , mpl::apply_wrap1<typename Next::key_owner,KW> - >::type type; - }; - }; - - // Outer indexing operators that dispatch to the right node's - // get() function. - template <class KW> - typename mpl::apply_wrap3<binding, KW, void_, mpl::true_>::type - operator[](keyword<KW> const& x) const - { - typename mpl::apply_wrap1<key_owner, KW>::type const& sublist = *this; - return sublist.get(x); - } - - template <class KW, class Default> - typename mpl::apply_wrap3<binding, KW, Default&, mpl::true_>::type - operator[](default_<KW, Default> x) const - { - typename mpl::apply_wrap1<key_owner, KW>::type const& sublist = *this; - return sublist.get(x); - } - - template <class KW, class F> - typename mpl::apply_wrap3< - binding,KW - , typename result_of0<F>::type - , mpl::true_ - >::type - operator[](lazy_default<KW,F> x) const - { - typename mpl::apply_wrap1<key_owner, KW>::type const& sublist = *this; - return sublist.get(x); - } - - // These just return the stored value; when empty_arg_list is - // reached, indicating no matching argument was passed, the - // default is returned, or if no default_ or lazy_default was - // passed, compilation fails. - reference get(keyword<key_type> const&) const - { - BOOST_MPL_ASSERT_NOT((holds_maybe)); - return arg.value; - } - - template <class Default> - reference get(default_<key_type,Default> const& d) const - { - return get_default(d, holds_maybe()); - } - - template <class Default> - reference get(lazy_default<key_type, Default>) const - { - return arg.value; - } - -#else - - reference operator[](keyword<key_type> const&) const - { - BOOST_MPL_ASSERT_NOT((holds_maybe)); - return arg.value; - } - - template <class Default> - reference operator[](default_<key_type, Default> const& d) const - { - return get_default(d, holds_maybe()); - } - - template <class Default> - reference operator[](lazy_default<key_type, Default>) const - { - return arg.value; - } - - // Builds an overload set including operator[]s defined in base - // classes. - using Next::operator[]; - - // - // End of indexing support - // - - - // - // For parameter_requirements matching this node's key_type, - // return a bool constant wrapper indicating whether the - // requirements are satisfied by TaggedArg. Used only for - // compile-time computation and never really called, so a - // declaration is enough. - // - template <class HasDefault, class Predicate, class ArgPack> - static typename mpl::apply_wrap2< - typename mpl::lambda<Predicate, lambda_tag>::type - , value_type, ArgPack - >::type - satisfies( - parameter_requirements<key_type,Predicate,HasDefault>* - , ArgPack* - ); - - // Builds an overload set including satisfies functions defined - // in base classes. - using Next::satisfies; -#endif - - // Comma operator to compose argument list without using parameters<>. - // Useful for argument lists with undetermined length. - template <class KW, class T2> - arg_list<tagged_argument<KW, T2>, self> - operator,(tagged_argument<KW,T2> x) const - { - return arg_list<tagged_argument<KW,T2>, self>(x, *this); - } - - // MPL sequence support - typedef self type; // Convenience for users - typedef Next tail_type; // For the benefit of iterators - typedef arg_list_tag tag; // For dispatching to sequence intrinsics -}; - -#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) // ETI workaround -template <> struct arg_list<int,int> {}; -#endif - -// MPL sequence support -template <class ArgumentPack> -struct arg_list_iterator -{ - typedef mpl::forward_iterator_tag category; - - // The incremented iterator - typedef arg_list_iterator<typename ArgumentPack::tail_type> next; - - // dereferencing yields the key type - typedef typename ArgumentPack::key_type type; -}; - -template <> -struct arg_list_iterator<empty_arg_list> {}; - -}} // namespace parameter::aux - -// MPL sequence support -namespace mpl -{ - template <> - struct begin_impl<parameter::aux::arg_list_tag> - { - template <class S> - struct apply - { - typedef parameter::aux::arg_list_iterator<S> type; - }; - }; - - template <> - struct end_impl<parameter::aux::arg_list_tag> - { - template <class> - struct apply - { - typedef parameter::aux::arg_list_iterator<parameter::aux::empty_arg_list> type; - }; - }; -} - -} // namespace boost - -#endif // ARG_LIST_050329_HPP - diff --git a/src/third_party/boost-1.56.0/boost/parameter/aux_/default.hpp b/src/third_party/boost-1.56.0/boost/parameter/aux_/default.hpp deleted file mode 100644 index 604da612996..00000000000 --- a/src/third_party/boost-1.56.0/boost/parameter/aux_/default.hpp +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright Daniel Wallin, David Abrahams 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 DEFAULT_050329_HPP -# define DEFAULT_050329_HPP - -# include <boost/detail/workaround.hpp> - -namespace boost { namespace parameter { namespace aux { - -// A wrapper for the default value passed by the user when resolving -// the value of the parameter with the given Keyword -template <class Keyword, class Value> -struct default_ -{ - default_(Value& x) - : value(x) - {} - - Value& value; -}; - -// -// lazy_default -- -// -// A wrapper for the default value computation function passed by -// the user when resolving the value of the parameter with the -// given keyword -// -# if BOOST_WORKAROUND(__EDG_VERSION__, <= 300) -// These compilers need a little extra help with overload -// resolution; we have empty_arg_list's operator[] accept a base -// class to make that overload less preferable. -template <class KW, class DefaultComputer> -struct lazy_default_base -{ - lazy_default_base(DefaultComputer const& x) - : compute_default(x) - {} - DefaultComputer const& compute_default; -}; - -template <class KW, class DefaultComputer> -struct lazy_default - : lazy_default_base<KW,DefaultComputer> - { - lazy_default(DefaultComputer const & x) - : lazy_default_base<KW,DefaultComputer>(x) - {} - }; -# define BOOST_PARAMETER_lazy_default_fallback lazy_default_base -# else -template <class KW, class DefaultComputer> -struct lazy_default -{ - lazy_default(const DefaultComputer& x) - : compute_default(x) - {} - DefaultComputer const& compute_default; -}; -# define BOOST_PARAMETER_lazy_default_fallback lazy_default -# endif - -}}} // namespace boost::parameter::aux - -#endif // DEFAULT_050329_HPP - diff --git a/src/third_party/boost-1.56.0/boost/parameter/aux_/is_maybe.hpp b/src/third_party/boost-1.56.0/boost/parameter/aux_/is_maybe.hpp deleted file mode 100644 index b8758528476..00000000000 --- a/src/third_party/boost-1.56.0/boost/parameter/aux_/is_maybe.hpp +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright Daniel Wallin, David Abrahams 2010. 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 BOOST_PARAMETER_IS_MAYBE_050329_HPP -#define BOOST_PARAMETER_IS_MAYBE_050329_HPP - -#include <boost/type_traits/is_base_and_derived.hpp> - -namespace boost { -namespace parameter { -namespace aux { - -struct maybe_base {}; - -template <class T> -struct is_maybe - : is_base_and_derived<maybe_base, T> -{}; - -} // namespace aux -} // namespace parameter -} // namespace boost - -#endif // BOOST_PARAMETER_IS_MAYBE_050329_HPP diff --git a/src/third_party/boost-1.56.0/boost/parameter/aux_/overloads.hpp b/src/third_party/boost-1.56.0/boost/parameter/aux_/overloads.hpp deleted file mode 100755 index dcc92d4d756..00000000000 --- a/src/third_party/boost-1.56.0/boost/parameter/aux_/overloads.hpp +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright David Abrahams, Daniel Wallin 2003. 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) - -// This file generates overloads in this format: -// -// template<class A0, class A1> -// typename mpl::apply_wrap1< -// aux::make_arg_list< -// PS0,A0 -// , aux::make_arg_list< -// PS1,A1 -// , mpl::identity<aux::empty_arg_list> -// > -// > -// , unnamed_list -// >::type -// operator()(A0 const& a0, A1 const& a1) const -// { -// typedef typename mpl::apply_wrap1< -// aux::make_arg_list< -// PS0,A0 -// , aux::make_arg_list< -// PS1,A1 -// , mpl::identity<aux::empty_arg_list> -// > -// > -// >::type arg_tuple; -// -// return arg_tuple( -// a0 -// , a1 -// , aux::void_() -// ... -// ); -// } -// - -#if !defined(BOOST_PP_IS_ITERATING) -# error Boost.Parameters - do not include this file! -#endif - -#define N BOOST_PP_ITERATION() - -#define BOOST_PARAMETER_open_list(z, n, text) \ - aux::item< \ - BOOST_PP_CAT(PS, n), BOOST_PP_CAT(A, n) - -#define BOOST_PARAMETER_close_list(z, n, text) > - -#define BOOST_PARAMETER_arg_list(n) \ - aux::make_arg_list< \ - BOOST_PP_ENUM(N, BOOST_PARAMETER_open_list, _) \ - , void_ \ - BOOST_PP_REPEAT(N, BOOST_PARAMETER_close_list, _) \ - , deduced_list \ - , aux::tag_keyword_arg \ - > - -#define BOOST_PARAMETER_arg_pack_init(z, n, limit) \ - BOOST_PP_CAT(a, BOOST_PP_SUB(limit,n)) - -template<BOOST_PP_ENUM_PARAMS(N, class A)> -typename mpl::first< - typename BOOST_PARAMETER_arg_list(N)::type ->::type -operator()(BOOST_PP_ENUM_BINARY_PARAMS(N, A, & a)) const -{ - typedef typename BOOST_PARAMETER_arg_list(N)::type result; - - typedef typename mpl::first<result>::type result_type; - typedef typename mpl::second<result>::type error; - error(); - - return result_type( - BOOST_PP_ENUM(N, BOOST_PARAMETER_arg_pack_init, BOOST_PP_DEC(N)) - BOOST_PP_ENUM_TRAILING_PARAMS( - BOOST_PP_SUB(BOOST_PARAMETER_MAX_ARITY, N) - , aux::void_reference() BOOST_PP_INTERCEPT - )); -} - -#undef BOOST_PARAMETER_arg_list -#undef BOOST_PARAMETER_open_list -#undef BOOST_PARAMETER_close_list -#undef N - diff --git a/src/third_party/boost-1.56.0/boost/parameter/aux_/parameter_requirements.hpp b/src/third_party/boost-1.56.0/boost/parameter/aux_/parameter_requirements.hpp deleted file mode 100755 index ad7a129dd70..00000000000 --- a/src/third_party/boost-1.56.0/boost/parameter/aux_/parameter_requirements.hpp +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright Daniel Wallin, David Abrahams 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 PARAMETER_REQUIREMENTS_050331_HPP -#define PARAMETER_REQUIREMENTS_050331_HPP - -namespace boost { namespace parameter { namespace aux { - -// Used to pass static information about parameter requirements -// through the satisfies() overload set (below). The -// matched function is never invoked, but its type indicates whether -// a parameter matches at compile-time -template <class Keyword, class Predicate, class HasDefault> -struct parameter_requirements -{ - typedef Keyword keyword; - typedef Predicate predicate; - typedef HasDefault has_default; -}; - -}}} // namespace boost::parameter::aux - -#endif // PARAMETER_REQUIREMENTS_050331_HPP diff --git a/src/third_party/boost-1.56.0/boost/parameter/aux_/result_of0.hpp b/src/third_party/boost-1.56.0/boost/parameter/aux_/result_of0.hpp deleted file mode 100755 index e0096148b47..00000000000 --- a/src/third_party/boost-1.56.0/boost/parameter/aux_/result_of0.hpp +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright David Abrahams 2005. 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) -#ifndef BOOST_PARAMETER_AUX_RESULT_OF0_DWA2005511_HPP -# define BOOST_PARAMETER_AUX_RESULT_OF0_DWA2005511_HPP - -# include <boost/utility/result_of.hpp> - -// A metafunction returning the result of invoking a nullary function -// object of the given type. - -#ifndef BOOST_NO_RESULT_OF - -# include <boost/utility/result_of.hpp> -namespace boost { namespace parameter { namespace aux { -template <class F> -struct result_of0 : result_of<F()> -{}; - -}}} // namespace boost::parameter::aux_ - -#else - -namespace boost { namespace parameter { namespace aux { -template <class F> -struct result_of0 -{ - typedef typename F::result_type type; -}; - -}}} // namespace boost::parameter::aux_ - -#endif - - -#endif // BOOST_PARAMETER_AUX_RESULT_OF0_DWA2005511_HPP diff --git a/src/third_party/boost-1.56.0/boost/parameter/aux_/set.hpp b/src/third_party/boost-1.56.0/boost/parameter/aux_/set.hpp deleted file mode 100644 index 1c4ccf5d94c..00000000000 --- a/src/third_party/boost-1.56.0/boost/parameter/aux_/set.hpp +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright Daniel Wallin 2006. 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 BOOST_PARAMETER_SET_060912_HPP -# define BOOST_PARAMETER_SET_060912_HPP - -# include <boost/detail/workaround.hpp> - -# if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) \ - && !BOOST_WORKAROUND(__GNUC__, < 3) -# include <boost/mpl/insert.hpp> -# include <boost/mpl/set/set0.hpp> -# include <boost/mpl/has_key.hpp> - -namespace boost { namespace parameter { namespace aux { - -typedef mpl::set0<> set0; - -template <class Set, class K> -struct insert_ -{ - typedef typename mpl::insert<Set, K>::type type; -}; - -template <class Set, class K> -struct has_key_ -{ - typedef typename mpl::has_key<Set, K>::type type; -}; - -}}} // namespace boost::parameter::aux - -# else - -# include <boost/mpl/list.hpp> -# include <boost/mpl/end.hpp> -# include <boost/mpl/find.hpp> -# include <boost/mpl/not.hpp> -# include <boost/mpl/push_front.hpp> - -namespace boost { namespace parameter { namespace aux { - -typedef mpl::list0<> set0; - -template <class Set, class K> -struct insert_ -{ - typedef typename mpl::push_front<Set, K>::type type; -}; - -template <class Set, class K> -struct has_key_ -{ - typedef typename mpl::find<Set, K>::type iter; - typedef mpl::not_< - is_same<iter, typename mpl::end<Set>::type> - > type; -}; - -}}} // namespace boost::parameter::aux - -# endif - - -#endif // BOOST_PARAMETER_SET_060912_HPP - diff --git a/src/third_party/boost-1.56.0/boost/parameter/aux_/tag.hpp b/src/third_party/boost-1.56.0/boost/parameter/aux_/tag.hpp deleted file mode 100755 index 475efb9e4ac..00000000000 --- a/src/third_party/boost-1.56.0/boost/parameter/aux_/tag.hpp +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright David Abrahams 2005. 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) -#ifndef BOOST_PARAMETER_AUX_TAG_DWA2005610_HPP -# define BOOST_PARAMETER_AUX_TAG_DWA2005610_HPP - -# include <boost/parameter/aux_/unwrap_cv_reference.hpp> -# include <boost/parameter/aux_/tagged_argument.hpp> - -namespace boost { namespace parameter { namespace aux { - -template <class Keyword, class ActualArg -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - , class = typename is_cv_reference_wrapper<ActualArg>::type -#endif - > -struct tag -{ - typedef tagged_argument< - Keyword - , typename unwrap_cv_reference<ActualArg>::type - > type; -}; - -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) -template <class Keyword, class ActualArg> -struct tag<Keyword,ActualArg,mpl::false_> -{ - typedef tagged_argument< - Keyword - , ActualArg - > type; -}; -#endif - -}}} // namespace boost::parameter::aux_ - -#endif // BOOST_PARAMETER_AUX_TAG_DWA2005610_HPP diff --git a/src/third_party/boost-1.56.0/boost/parameter/aux_/tagged_argument.hpp b/src/third_party/boost-1.56.0/boost/parameter/aux_/tagged_argument.hpp deleted file mode 100644 index 6248be2d4a5..00000000000 --- a/src/third_party/boost-1.56.0/boost/parameter/aux_/tagged_argument.hpp +++ /dev/null @@ -1,188 +0,0 @@ -// Copyright Daniel Wallin, David Abrahams 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 BOOST_PARAMETER_TAGGED_ARGUMENT_050328_HPP -# define BOOST_PARAMETER_TAGGED_ARGUMENT_050328_HPP - -# include <boost/parameter/aux_/void.hpp> -# include <boost/parameter/aux_/arg_list.hpp> -# include <boost/parameter/aux_/result_of0.hpp> -# include <boost/mpl/if.hpp> -# include <boost/mpl/apply_wrap.hpp> -# include <boost/mpl/and.hpp> -# include <boost/mpl/not.hpp> -# include <boost/type_traits/is_same.hpp> -# include <boost/type_traits/is_convertible.hpp> -# include <boost/type_traits/is_reference.hpp> - -namespace boost { namespace parameter { namespace aux { - -struct empty_arg_list; -struct arg_list_tag; - -struct tagged_argument_base {}; - -// Holds a reference to an argument of type Arg associated with -// keyword Keyword - -template <class Keyword, class Arg> -struct tagged_argument : tagged_argument_base -{ - typedef Keyword key_type; - typedef Arg value_type; - typedef Arg& reference; - - tagged_argument(reference x) : value(x) {} - - // A metafunction class that, given a keyword and a default - // type, returns the appropriate result type for a keyword - // lookup given that default - struct binding - { - template <class KW, class Default, class Reference> - struct apply - { - typedef typename mpl::eval_if< - boost::is_same<KW, key_type> - , mpl::if_<Reference, reference, value_type> - , mpl::identity<Default> - >::type type; - }; - }; - - // Comma operator to compose argument list without using parameters<>. - // Useful for argument lists with undetermined length. - template <class Keyword2, class Arg2> - arg_list< - tagged_argument<Keyword, Arg> - , arg_list<tagged_argument<Keyword2, Arg2> > - > - operator,(tagged_argument<Keyword2, Arg2> x) const - { - return arg_list< - tagged_argument<Keyword, Arg> - , arg_list<tagged_argument<Keyword2, Arg2> > - >( - *this - , arg_list<tagged_argument<Keyword2, Arg2> >(x, empty_arg_list()) - ); - } - - reference operator[](keyword<Keyword> const&) const - { - return value; - } - -# if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - template <class KW, class Default> - Default& get_with_default(default_<KW,Default> const& x, int) const - { - return x.value; - } - - template <class Default> - reference get_with_default(default_<key_type,Default> const&, long) const - { - return value; - } - - template <class KW, class Default> - typename mpl::apply_wrap3<binding, KW, Default&, mpl::true_>::type - operator[](default_<KW,Default> const& x) const - { - return get_with_default(x, 0L); - } - - template <class KW, class F> - typename result_of0<F>::type - get_with_lazy_default(lazy_default<KW,F> const& x, int) const - { - return x.compute_default(); - } - - template <class F> - reference get_with_lazy_default(lazy_default<key_type,F> const&, long) const - { - return value; - } - - template <class KW, class F> - typename mpl::apply_wrap3< - binding,KW - , typename result_of0<F>::type - , mpl::true_ - >::type - operator[](lazy_default<KW,F> const& x) const - { - return get_with_lazy_default(x, 0L); - } -# else - template <class Default> - reference operator[](default_<key_type,Default> const& x) const - { - return value; - } - - template <class F> - reference operator[](lazy_default<key_type,F> const& x) const - { - return value; - } - - template <class KW, class Default> - Default& operator[](default_<KW,Default> const& x) const - { - return x.value; - } - - template <class KW, class F> - typename result_of0<F>::type operator[](lazy_default<KW,F> const& x) const - { - return x.compute_default(); - } - - template <class ParameterRequirements> - static typename ParameterRequirements::has_default - satisfies(ParameterRequirements*); - - template <class HasDefault, class Predicate> - static typename mpl::apply1<Predicate, value_type>::type - satisfies( - parameter_requirements<key_type,Predicate,HasDefault>* - ); -# endif - - reference value; -# if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310)) - // warning suppression - private: - void operator=(tagged_argument const&); - public: -# endif - // MPL sequence support - typedef tagged_argument type; // Convenience for users - typedef empty_arg_list tail_type; // For the benefit of iterators - typedef arg_list_tag tag; // For dispatching to sequence intrinsics -}; - -// Defines a metafunction, is_tagged_argument, that identifies -// tagged_argument specializations and their derived classes. -template <class T> -struct is_tagged_argument_aux - : is_convertible<T*,tagged_argument_base const*> -{}; - -template <class T> -struct is_tagged_argument - : mpl::and_< - mpl::not_<is_reference<T> > - , is_tagged_argument_aux<T> - > -{}; - -}}} // namespace boost::parameter::aux - -#endif // BOOST_PARAMETER_TAGGED_ARGUMENT_050328_HPP - diff --git a/src/third_party/boost-1.56.0/boost/parameter/aux_/template_keyword.hpp b/src/third_party/boost-1.56.0/boost/parameter/aux_/template_keyword.hpp deleted file mode 100755 index 5a02f008a32..00000000000 --- a/src/third_party/boost-1.56.0/boost/parameter/aux_/template_keyword.hpp +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright Daniel Wallin 2006. 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 BOOST_PARAMETER_TEMPLATE_KEYWORD_060203_HPP -# define BOOST_PARAMETER_TEMPLATE_KEYWORD_060203_HPP - -# include <boost/mpl/and.hpp> -# include <boost/mpl/not.hpp> -# include <boost/type_traits/is_convertible.hpp> -# include <boost/type_traits/is_reference.hpp> - -namespace boost { namespace parameter { - -namespace aux -{ - - struct template_keyword_tag {}; - - template <class T, class U> - struct is_pointer_convertible - : is_convertible<T*, U*> - {}; - - template <class T> - struct is_template_keyword - : mpl::and_< - mpl::not_<is_reference<T> > - , is_pointer_convertible<T, template_keyword_tag> - > - {}; - -} // namespace aux - -template <class Tag, class T> -struct template_keyword - : aux::template_keyword_tag -{ - typedef Tag key_type; - typedef T value_type; - typedef value_type reference; -}; - -}} // namespace boost::parameter - -#endif // BOOST_PARAMETER_TEMPLATE_KEYWORD_060203_HPP - diff --git a/src/third_party/boost-1.56.0/boost/parameter/aux_/unwrap_cv_reference.hpp b/src/third_party/boost-1.56.0/boost/parameter/aux_/unwrap_cv_reference.hpp deleted file mode 100755 index e7aa0c1d3a5..00000000000 --- a/src/third_party/boost-1.56.0/boost/parameter/aux_/unwrap_cv_reference.hpp +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright Daniel Wallin, David Abrahams 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 UNWRAP_CV_REFERENCE_050328_HPP -#define UNWRAP_CV_REFERENCE_050328_HPP - -#include <boost/parameter/aux_/yesno.hpp> -#include <boost/mpl/bool.hpp> -#include <boost/mpl/identity.hpp> -#include <boost/mpl/eval_if.hpp> - -namespace boost { template<class T> class reference_wrapper; } - -namespace boost { namespace parameter { namespace aux { - -// -// reference_wrapper support -- because of the forwarding problem, -// when passing arguments positionally by non-const reference, we -// ask users of named parameter interfaces to use ref(x) to wrap -// them. -// - -// is_cv_reference_wrapper returns mpl::true_ if T is of type -// reference_wrapper<U> cv -template <class U> -yes_tag is_cv_reference_wrapper_check(reference_wrapper<U> const volatile*); -no_tag is_cv_reference_wrapper_check(...); - -template <class T> -struct is_cv_reference_wrapper -{ - BOOST_STATIC_CONSTANT( - bool, value = ( - sizeof(is_cv_reference_wrapper_check((T*)0)) == sizeof(yes_tag) - ) - ); - - typedef mpl::bool_< -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - is_cv_reference_wrapper:: -#endif - value> type; -}; - -#if BOOST_WORKAROUND(MSVC, == 1200) -template <> -struct is_cv_reference_wrapper<int> - : mpl::false_ {}; -#endif - -// Needed for unwrap_cv_reference below. T might be const, so -// eval_if might fail because of deriving from T const on EDG. -template <class T> -struct get_type -{ - typedef typename T::type type; -}; - -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) -template <class T, class is_reference_wrapper = typename is_cv_reference_wrapper<T>::type> -struct unwrap_cv_reference -{ - typedef T type; -}; - -template <class T> -struct unwrap_cv_reference<T const, mpl::false_> -{ - typedef T const type; -}; - -template <class T> -struct unwrap_cv_reference<T, mpl::true_> - : T -{}; - -#else -// Produces the unwrapped type to hold a reference to in named<> -// Can't use boost::unwrap_reference<> here because it -// doesn't handle the case where T = reference_wrapper<U> cv -template <class T> -struct unwrap_cv_reference -{ - typedef typename mpl::eval_if< - is_cv_reference_wrapper<T> - , get_type<T> - , mpl::identity<T> - >::type type; -}; -#endif - -}}} // namespace boost::parameter::aux - -#endif // UNWRAP_CV_REFERENCE_050328_HPP - diff --git a/src/third_party/boost-1.56.0/boost/parameter/aux_/void.hpp b/src/third_party/boost-1.56.0/boost/parameter/aux_/void.hpp deleted file mode 100755 index 7061a7deb5a..00000000000 --- a/src/third_party/boost-1.56.0/boost/parameter/aux_/void.hpp +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright Daniel Wallin, David Abrahams 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 BOOST_PARAMETER_VOID_050329_HPP -#define BOOST_PARAMETER_VOID_050329_HPP - -namespace boost { namespace parameter { - -// A placemarker for "no argument passed." -// MAINTAINER NOTE: Do not make this into a metafunction -struct void_ {}; - -namespace aux -{ - - inline void_& void_reference() - { - static void_ instance; - return instance; - } - -} // namespace aux - -}} // namespace boost::parameter - -#endif // BOOST_PARAMETER_VOID_050329_HPP - diff --git a/src/third_party/boost-1.56.0/boost/parameter/aux_/yesno.hpp b/src/third_party/boost-1.56.0/boost/parameter/aux_/yesno.hpp deleted file mode 100755 index 13fa545a683..00000000000 --- a/src/third_party/boost-1.56.0/boost/parameter/aux_/yesno.hpp +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright Daniel Wallin, David Abrahams 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 YESNO_050328_HPP -#define YESNO_050328_HPP - -#include <boost/mpl/bool.hpp> - -namespace boost { namespace parameter { namespace aux { - -// types used with the "sizeof trick" to capture the results of -// overload resolution at compile-time. -typedef char yes_tag; -typedef char (&no_tag)[2]; - -// mpl::true_ and mpl::false_ are not distinguishable by sizeof(), -// so we pass them through these functions to get a type that is. -yes_tag to_yesno(mpl::true_); -no_tag to_yesno(mpl::false_); - -}}} // namespace boost::parameter::aux - -#endif // YESNO_050328_HPP - diff --git a/src/third_party/boost-1.56.0/boost/parameter/binding.hpp b/src/third_party/boost-1.56.0/boost/parameter/binding.hpp deleted file mode 100755 index 632f0fdb9d9..00000000000 --- a/src/third_party/boost-1.56.0/boost/parameter/binding.hpp +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright David Abrahams 2005. 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) -#ifndef BOOST_PARAMETER_BINDING_DWA200558_HPP -# define BOOST_PARAMETER_BINDING_DWA200558_HPP - -# include <boost/mpl/apply.hpp> -# include <boost/mpl/assert.hpp> -# include <boost/mpl/and.hpp> -# include <boost/parameter/aux_/result_of0.hpp> -# include <boost/parameter/aux_/void.hpp> -# include <boost/type_traits/is_same.hpp> - -# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) -# include <boost/mpl/eval_if.hpp> -# endif - -namespace boost { namespace parameter { - -// A metafunction that, given an argument pack, returns the type of -// the parameter identified by the given keyword. If no such -// parameter has been specified, returns Default - -# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \ - || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) -template <class Parameters, class Keyword, class Default> -struct binding0 -{ - typedef typename mpl::apply_wrap3< - typename Parameters::binding,Keyword,Default,mpl::true_ - >::type type; - - BOOST_MPL_ASSERT_NOT(( - mpl::and_< - is_same<Default, void_> - , is_same<type, void_> - > - )); -}; -# endif - -template <class Parameters, class Keyword, class Default = void_> -# if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) -struct binding -# else -struct binding_eti -# endif -{ -# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \ - || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - typedef typename mpl::eval_if< - mpl::is_placeholder<Parameters> - , mpl::identity<int> - , binding0<Parameters,Keyword,Default> - >::type type; -# else - typedef typename mpl::apply_wrap3< - typename Parameters::binding,Keyword,Default,mpl::true_ - >::type type; - - BOOST_MPL_ASSERT_NOT(( - mpl::and_< - is_same<Default, void_> - , is_same<type, void_> - > - )); -# endif - -# if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) - BOOST_MPL_AUX_LAMBDA_SUPPORT(3,binding,(Parameters,Keyword,Default)) -# endif -}; - -# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) -template <class Parameters, class Keyword, class Default = void_> -struct binding -{ - typedef typename mpl::eval_if< - is_same<Parameters, int> - , mpl::identity<int> - , binding_eti<Parameters, Keyword, Default> - >::type type; - - BOOST_MPL_AUX_LAMBDA_SUPPORT(3,binding,(Parameters,Keyword,Default)) -}; -# endif - -// A metafunction that, given an argument pack, returns the type of -// the parameter identified by the given keyword. If no such -// parameter has been specified, returns the type returned by invoking -// DefaultFn -template <class Parameters, class Keyword, class DefaultFn> -struct lazy_binding -{ - typedef typename mpl::apply_wrap3< - typename Parameters::binding - , Keyword - , typename aux::result_of0<DefaultFn>::type - , mpl::true_ - >::type type; -}; - - -}} // namespace boost::parameter - -#endif // BOOST_PARAMETER_BINDING_DWA200558_HPP diff --git a/src/third_party/boost-1.56.0/boost/parameter/config.hpp b/src/third_party/boost-1.56.0/boost/parameter/config.hpp deleted file mode 100644 index 5710c92c0a0..00000000000 --- a/src/third_party/boost-1.56.0/boost/parameter/config.hpp +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright Daniel Wallin, David Abrahams 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 BOOST_PARAMETER_CONFIG_050403_HPP -#define BOOST_PARAMETER_CONFIG_050403_HPP - -#ifndef BOOST_PARAMETER_MAX_ARITY -# define BOOST_PARAMETER_MAX_ARITY 8 -#endif - -#endif // BOOST_PARAMETER_CONFIG_050403_HPP - diff --git a/src/third_party/boost-1.56.0/boost/parameter/keyword.hpp b/src/third_party/boost-1.56.0/boost/parameter/keyword.hpp deleted file mode 100755 index cfb4bfdc531..00000000000 --- a/src/third_party/boost-1.56.0/boost/parameter/keyword.hpp +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright Daniel Wallin, David Abrahams 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 KEYWORD_050328_HPP -#define KEYWORD_050328_HPP - -#include <boost/parameter/aux_/unwrap_cv_reference.hpp> -#include <boost/parameter/aux_/tag.hpp> -#include <boost/parameter/aux_/default.hpp> - -namespace boost { namespace parameter { - -// Instances of unique specializations of keyword<...> serve to -// associate arguments with parameter names. For example: -// -// struct rate_; // parameter names -// struct skew_; -// namespace -// { -// keyword<rate_> rate; // keywords -// keyword<skew_> skew; -// } -// -// ... -// -// f(rate = 1, skew = 2.4); -// -template <class Tag> -struct keyword -{ - template <class T> - typename aux::tag<Tag, T>::type const - operator=(T& x) const - { - typedef typename aux::tag<Tag, T>::type result; - return result(x); - } - - template <class Default> - aux::default_<Tag, Default> - operator|(Default& default_) const - { - return aux::default_<Tag, Default>(default_); - } - - template <class Default> - aux::lazy_default<Tag, Default> - operator||(Default& default_) const - { - return aux::lazy_default<Tag, Default>(default_); - } - -#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) // avoid partial ordering bugs - template <class T> - typename aux::tag<Tag, T const>::type const - operator=(T const& x) const - { - typedef typename aux::tag<Tag, T const>::type result; - return result(x); - } -#endif - -#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) // avoid partial ordering bugs - template <class Default> - aux::default_<Tag, const Default> - operator|(const Default& default_) const -#if BOOST_WORKAROUND(BOOST_MSVC, == 1300) - volatile -#endif - { - return aux::default_<Tag, const Default>(default_); - } - - template <class Default> - aux::lazy_default<Tag, Default> - operator||(Default const& default_) const -#if BOOST_WORKAROUND(BOOST_MSVC, == 1300) - volatile -#endif - { - return aux::lazy_default<Tag, Default>(default_); - } -#endif - - public: // Insurance against ODR violations - - // People will need to define these keywords in header files. To - // prevent ODR violations, it's important that the keyword used in - // every instantiation of a function template is the same object. - // We provide a reference to a common instance of each keyword - // object and prevent construction by users. - static keyword<Tag> const instance; - - // This interface is deprecated - static keyword<Tag>& get() - { - return const_cast<keyword<Tag>&>(instance); - } -}; - -template <class Tag> -keyword<Tag> const keyword<Tag>::instance = {}; - -// Reduces boilerplate required to declare and initialize keywords -// without violating ODR. Declares a keyword tag type with the given -// name in namespace tag_namespace, and declares and initializes a -// reference in an anonymous namespace to a singleton instance of that -// type. - -#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) - -# define BOOST_PARAMETER_KEYWORD(tag_namespace,name) \ - namespace tag_namespace \ - { \ - struct name \ - { \ - static char const* keyword_name() \ - { \ - return #name; \ - } \ - }; \ - } \ - static ::boost::parameter::keyword<tag_namespace::name> const& name \ - = ::boost::parameter::keyword<tag_namespace::name>::instance; - -#else - -#define BOOST_PARAMETER_KEYWORD(tag_namespace,name) \ - namespace tag_namespace \ - { \ - struct name \ - { \ - static char const* keyword_name() \ - { \ - return #name; \ - } \ - }; \ - } \ - namespace \ - { \ - ::boost::parameter::keyword<tag_namespace::name> const& name \ - = ::boost::parameter::keyword<tag_namespace::name>::instance;\ - } - -#endif - -}} // namespace boost::parameter - -#endif // KEYWORD_050328_HPP - diff --git a/src/third_party/boost-1.56.0/boost/parameter/parameters.hpp b/src/third_party/boost-1.56.0/boost/parameter/parameters.hpp deleted file mode 100755 index 97e102434e8..00000000000 --- a/src/third_party/boost-1.56.0/boost/parameter/parameters.hpp +++ /dev/null @@ -1,931 +0,0 @@ -// Copyright David Abrahams, Daniel Wallin 2003. 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 BOOST_PARAMETERS_031014_HPP -#define BOOST_PARAMETERS_031014_HPP - -#include <boost/detail/is_xxx.hpp> - -#include <boost/type_traits/is_const.hpp> - -#include <boost/mpl/lambda.hpp> -#include <boost/mpl/apply.hpp> -#include <boost/mpl/always.hpp> -#include <boost/mpl/and.hpp> -#include <boost/mpl/or.hpp> -#include <boost/mpl/if.hpp> -#include <boost/mpl/identity.hpp> -#include <boost/mpl/not.hpp> -#include <boost/mpl/eval_if.hpp> -#include <boost/mpl/pair.hpp> - -#include <boost/type_traits/is_same.hpp> -#include <boost/type_traits/remove_reference.hpp> - -#include <boost/preprocessor/repetition/enum.hpp> -#include <boost/preprocessor/repetition/enum_params.hpp> -#include <boost/preprocessor/repetition/enum_trailing_params.hpp> -#include <boost/preprocessor/arithmetic/sub.hpp> -#include <boost/preprocessor/repetition/repeat.hpp> -#include <boost/preprocessor/repetition/enum_shifted.hpp> -#include <boost/preprocessor/repetition/enum_binary_params.hpp> -#include <boost/preprocessor/repetition/enum_shifted_params.hpp> -#include <boost/preprocessor/seq/elem.hpp> -#include <boost/preprocessor/iteration/iterate.hpp> -#include <boost/preprocessor/facilities/intercept.hpp> -#include <boost/preprocessor/cat.hpp> - -#include <boost/parameter/aux_/arg_list.hpp> -#include <boost/parameter/aux_/yesno.hpp> -#include <boost/parameter/aux_/void.hpp> -#include <boost/parameter/aux_/default.hpp> -#include <boost/parameter/aux_/unwrap_cv_reference.hpp> -#include <boost/parameter/aux_/tagged_argument.hpp> -#include <boost/parameter/aux_/tag.hpp> -#include <boost/parameter/aux_/template_keyword.hpp> -#include <boost/parameter/aux_/set.hpp> -#include <boost/parameter/config.hpp> - -namespace parameter_ -{ - template <class T> - struct unmatched_argument - { - BOOST_MPL_ASSERT((boost::is_same<T,void>)); - typedef int type; - }; -} // namespace parameter_ - -namespace boost { - -template<class T> class reference_wrapper; - -namespace parameter { - -namespace aux { struct use_default {}; } - -// These templates can be used to describe the treatment of particular -// named parameters for the purposes of overload elimination with -// SFINAE, by placing specializations in the parameters<...> list. In -// order for a treated function to participate in overload resolution: -// -// - all keyword tags wrapped in required<...> must have a matching -// actual argument -// -// - The actual argument type matched by every keyword tag -// associated with a predicate must satisfy that predicate -// -// If a keyword k is specified without an optional<...> or -// required<...>, wrapper, it is treated as though optional<k> were -// specified. -// -// If a keyword k is specified with deduced<...>, that keyword -// will be automatically deduced from the argument list. -// -template <class Tag, class Predicate = aux::use_default> -struct required -{ - typedef Tag key_type; - typedef Predicate predicate; -}; - -template <class Tag, class Predicate = aux::use_default> -struct optional -{ - typedef Tag key_type; - typedef Predicate predicate; -}; - -template <class Tag> -struct deduced -{ - typedef Tag key_type; -}; - -namespace aux -{ - // Defines metafunctions, is_required and is_optional, that - // identify required<...>, optional<...> and deduced<...> specializations. - BOOST_DETAIL_IS_XXX_DEF(required, required, 2) - BOOST_DETAIL_IS_XXX_DEF(optional, optional, 2) - BOOST_DETAIL_IS_XXX_DEF(deduced_aux, deduced, 1) - - template <class S> - struct is_deduced0 - : is_deduced_aux< - typename S::key_type - >::type - {}; - - template <class S> - struct is_deduced - : mpl::eval_if< - mpl::or_< - is_optional<S>, is_required<S> - > - , is_deduced0<S> - , mpl::false_ - >::type - {}; - - // - // key_type, has_default, and predicate -- - // - // These metafunctions accept a ParameterSpec and extract the - // keyword tag, whether or not a default is supplied for the - // parameter, and the predicate that the corresponding actual - // argument type is required match. - // - // a ParameterSpec is a specialization of either keyword<...>, - // required<...>, optional<...> - // - - // helper for key_type<...>, below. - template <class T> - struct get_tag_type0 - { - typedef typename T::key_type type; - }; - - template <class T> - struct get_tag_type - : mpl::eval_if< - is_deduced_aux<typename T::key_type> - , get_tag_type0<typename T::key_type> - , mpl::identity<typename T::key_type> - > - {}; - - template <class T> - struct tag_type - : mpl::eval_if< - mpl::or_< - is_optional<T> - , is_required<T> - > - , get_tag_type<T> - , mpl::identity<T> - > - {}; - - template <class T> - struct has_default - : mpl::not_<is_required<T> > - {}; - - // helper for get_predicate<...>, below - template <class T> - struct get_predicate_or_default - { - typedef T type; - }; - - template <> - struct get_predicate_or_default<use_default> - { - typedef mpl::always<mpl::true_> type; - }; - - // helper for predicate<...>, below - template <class T> - struct get_predicate - { - typedef typename - get_predicate_or_default<typename T::predicate>::type - type; - }; - - template <class T> - struct predicate - : mpl::eval_if< - mpl::or_< - is_optional<T> - , is_required<T> - > - , get_predicate<T> - , mpl::identity<mpl::always<mpl::true_> > - > - { - }; - - - // Converts a ParameterSpec into a specialization of - // parameter_requirements. We need to do this in order to get the - // tag_type into the type in a way that can be conveniently matched - // by a satisfies(...) member function in arg_list. - template <class ParameterSpec> - struct as_parameter_requirements - { - typedef parameter_requirements< - typename tag_type<ParameterSpec>::type - , typename predicate<ParameterSpec>::type - , typename has_default<ParameterSpec>::type - > type; - }; - - template <class T> - struct is_named_argument - : mpl::or_< - is_template_keyword<T> - , is_tagged_argument<T> - > - {}; - - // Returns mpl::true_ iff the given ParameterRequirements are - // satisfied by ArgList. - template <class ArgList, class ParameterRequirements> - struct satisfies - { -#if BOOST_WORKAROUND(BOOST_MSVC, == 1310) - // VC7.1 can't handle the sizeof() implementation below, - // so we use this instead. - typedef typename mpl::apply_wrap3< - typename ArgList::binding - , typename ParameterRequirements::keyword - , void_ - , mpl::false_ - >::type bound; - - typedef typename mpl::eval_if< - is_same<bound, void_> - , typename ParameterRequirements::has_default - , mpl::apply_wrap2< - typename mpl::lambda< - typename ParameterRequirements::predicate, lambda_tag - >::type - , bound - , ArgList - > - >::type type; -#else - BOOST_STATIC_CONSTANT( - bool, value = ( - sizeof( - aux::to_yesno( - ArgList::satisfies((ParameterRequirements*)0, (ArgList*)0) - ) - ) == sizeof(yes_tag) - ) - ); - - typedef mpl::bool_<satisfies::value> type; -#endif - }; - - // Returns mpl::true_ if the requirements of the given ParameterSpec - // are satisfied by ArgList. - template <class ArgList, class ParameterSpec> - struct satisfies_requirements_of - : satisfies< - ArgList - , typename as_parameter_requirements<ParameterSpec>::type - > - {}; - - // Tags a deduced argument Arg with the keyword tag of Spec using TagFn. - // Returns the tagged argument and the mpl::set<> UsedArgs with the - // tag of Spec inserted. - template <class UsedArgs, class Spec, class Arg, class TagFn> - struct tag_deduced - { - typedef mpl::pair< - typename mpl::apply_wrap2<TagFn, typename tag_type<Spec>::type, Arg>::type - , typename aux::insert_<UsedArgs, typename tag_type<Spec>::type>::type - > type; - }; - - template < - class Argument - , class ArgumentPack - , class DeducedArgs - , class UsedArgs - , class TagFn - > - struct deduce_tag; - - // Tag type passed to MPL lambda. - struct lambda_tag; - - // Helper for deduce_tag<> below. - template < - class Argument - , class ArgumentPack - , class DeducedArgs - , class UsedArgs - , class TagFn - > - struct deduce_tag0 - { - typedef typename DeducedArgs::spec spec; - - typedef typename mpl::apply_wrap2< - typename mpl::lambda< - typename spec::predicate, lambda_tag - >::type - , Argument - , ArgumentPack - >::type condition; - - // Deduced parameter matches several arguments. - - BOOST_MPL_ASSERT(( - mpl::not_<mpl::and_< - condition - , aux::has_key_<UsedArgs, typename tag_type<spec>::type> - > > - )); - - typedef typename mpl::eval_if< - condition - , tag_deduced<UsedArgs, spec, Argument, TagFn> - , deduce_tag<Argument, ArgumentPack, typename DeducedArgs::tail, UsedArgs, TagFn> - >::type type; - }; - - // Tries to deduced a keyword tag for a given Argument. - // Returns an mpl::pair<> consisting of the tagged_argument<>, - // and an mpl::set<> where the new tag has been inserted. - // - // Argument: The argument type to be tagged. - // - // ArgumentPack: The ArgumentPack built so far. - // - // DeducedArgs: A specialization of deduced_item<> (see below). - // A list containing only the deduced ParameterSpecs. - // - // UsedArgs: An mpl::set<> containing the keyword tags used so far. - // - // TagFn: A metafunction class used to tag positional or deduced - // arguments with a keyword tag. - - template < - class Argument - , class ArgumentPack - , class DeducedArgs - , class UsedArgs - , class TagFn - > - struct deduce_tag - { - typedef typename mpl::eval_if< - is_same<DeducedArgs, void_> - , mpl::pair<void_, UsedArgs> - , deduce_tag0<Argument, ArgumentPack, DeducedArgs, UsedArgs, TagFn> - >::type type; - }; - - template < - class List - , class DeducedArgs - , class TagFn - , class Positional - , class UsedArgs - , class ArgumentPack - , class Error - > - struct make_arg_list_aux; - - // Inserts Tagged::key_type into the UserArgs set. - // Extra indirection to lazily evaluate Tagged::key_type. - template <class UsedArgs, class Tagged> - struct insert_tagged - { - typedef typename aux::insert_< - UsedArgs, typename Tagged::key_type - >::type type; - }; - - // Borland needs the insane extra-indirection workaround below - // so that it doesn't magically drop the const qualifier from - // the argument type. - - template < - class List - , class DeducedArgs - , class TagFn - , class Positional - , class UsedArgs - , class ArgumentPack -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - , class argument -#endif - , class Error - > -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - struct make_arg_list00 -#else - struct make_arg_list0 -#endif - { -#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - typedef typename List::arg argument; -#endif - typedef typename List::spec parameter_spec; - typedef typename tag_type<parameter_spec>::type tag_; - - typedef is_named_argument<argument> is_tagged; - - // If this argument is either explicitly tagged or a deduced - // parameter, we turn off positional matching. - typedef mpl::and_< - mpl::not_< - mpl::or_<is_deduced<parameter_spec>, is_tagged> - > - , Positional - > positional; - - // If this parameter is explicitly tagged we add it to the - // used-parmeters set. We only really need to add parameters - // that are deduced, but we would need a way to check if - // a given tag corresponds to a deduced parameter spec. - typedef typename mpl::eval_if< - is_tagged - , insert_tagged<UsedArgs, argument> - , mpl::identity<UsedArgs> - >::type used_args; - - // If this parameter is neither explicitly tagged, nor - // positionally matched; deduce the tag from the deduced - // parameter specs. - typedef typename mpl::eval_if< - mpl::or_<is_tagged, positional> - , mpl::pair<void_, used_args> - , deduce_tag<argument, ArgumentPack, DeducedArgs, used_args, TagFn> - >::type deduced_data; - - // If this parameter is explicitly tagged.. - typedef typename mpl::eval_if< - is_tagged - , mpl::identity<argument> // .. just use it - , mpl::eval_if< // .. else, if positional matching is turned on.. - positional - , mpl::apply_wrap2<TagFn, tag_, argument> // .. tag it positionally - , mpl::first<deduced_data> // .. else, use the deduced tag - > - >::type tagged; - - // We build the arg_list incrementally as we go, prepending new - // nodes. - - typedef typename mpl::if_< - mpl::and_< - is_same<Error, void_> - , is_same<tagged, void_> - > - , parameter_::unmatched_argument<argument> - , void_ - >::type error; - - typedef typename mpl::if_< - is_same<tagged, void_> - , ArgumentPack - , arg_list<tagged, ArgumentPack> - >::type argument_pack; - - typedef typename make_arg_list_aux< - typename List::tail - , DeducedArgs - , TagFn - , positional - , typename deduced_data::second - , argument_pack - , error - >::type type; - }; - -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - template < - class List - , class DeducedArgs - , class TagFn - , class Positional - , class UsedArgs - , class ArgumentPack - , class Error - > - struct make_arg_list0 - { - typedef typename mpl::eval_if< - typename List::is_arg_const - , make_arg_list00< - List - , DeducedArgs - , TagFn - , Positional - , UsedArgs - , ArgumentPack - , typename List::arg const - , Error - > - , make_arg_list00< - List - , DeducedArgs - , TagFn - , Positional - , UsedArgs - , ArgumentPack - , typename List::arg - , Error - > - >::type type; - }; -#endif - - // Returns an ArgumentPack where the list of arguments has - // been tagged with keyword tags. - // - // List: A specialization of item<> (see below). Contains - // both the ordered ParameterSpecs, and the given arguments. - // - // DeducedArgs: A specialization of deduced_item<> (see below). - // A list containing only the deduced ParameterSpecs. - // - // TagFn: A metafunction class used to tag positional or deduced - // arguments with a keyword tag. - // - // Position: An mpl::bool_<> specialization indicating if positional - // matching is to be performed. - // - // DeducedSet: An mpl::set<> containing the keyword tags used so far. - // - // ArgumentPack: The ArgumentPack built so far. This is initially an - // empty_arg_list and is built incrementally. - // - - template < - class List - , class DeducedArgs - , class TagFn - , class Positional - , class DeducedSet - , class ArgumentPack - , class Error - > - struct make_arg_list_aux - { - typedef typename mpl::eval_if< - is_same<List, void_> - , mpl::identity<mpl::pair<ArgumentPack, Error> > - , make_arg_list0<List, DeducedArgs, TagFn, Positional, DeducedSet, ArgumentPack, Error> - >::type type; - }; - - // VC6.5 was choking on the default parameters for make_arg_list_aux, so - // this just forwards to that adding in the defaults. - template < - class List - , class DeducedArgs - , class TagFn - , class EmitErrors = mpl::true_ - > - struct make_arg_list - { - typedef typename make_arg_list_aux< - List, DeducedArgs, TagFn, mpl::true_, aux::set0, empty_arg_list, void_ - >::type type; - }; - - // A parameter spec item typelist. - template <class Spec, class Arg, class Tail = void_> - struct item - { - typedef Spec spec; - -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - typedef is_const<Arg> is_arg_const; -#endif - - typedef Arg arg; - typedef Tail tail; - }; - - template <class Spec, class Arg, class Tail> - struct make_item - { - typedef item<Spec, Arg, typename Tail::type> type; - }; - - // Creates a item typelist. - template <class Spec, class Arg, class Tail> - struct make_items - { - typedef typename mpl::eval_if< - is_same<Arg, void_> - , mpl::identity<void_> - , make_item<Spec, Arg, Tail> - >::type type; - }; - - // A typelist that stored deduced parameter specs. - template <class ParameterSpec, class Tail = void_> - struct deduced_item - { - typedef ParameterSpec spec; - typedef Tail tail; - }; - - // Evaluate Tail and construct deduced_item list. - template <class Spec, class Tail> - struct make_deduced_item - { - typedef deduced_item<Spec, typename Tail::type> type; - }; - - template <class Spec, class Tail> - struct make_deduced_items - { - typedef typename mpl::eval_if< - is_same<Spec, void_> - , mpl::identity<void_> - , mpl::eval_if< - is_deduced<Spec> - , make_deduced_item<Spec, Tail> - , Tail - > - >::type type; - }; - - // Generates: - // - // make< - // parameter_spec#0, argument_type#0 - // , make< - // parameter_spec#1, argument_type#1 - // , ... mpl::identity<aux::empty_arg_list> - // ...> - // > -#define BOOST_PARAMETER_make_arg_list(z, n, names) \ - BOOST_PP_SEQ_ELEM(0,names)< \ - BOOST_PP_CAT(BOOST_PP_SEQ_ELEM(1,names), n), \ - BOOST_PP_CAT(BOOST_PP_SEQ_ELEM(2,names), n), - -#define BOOST_PARAMETER_right_angle(z, n, text) > - -#define BOOST_PARAMETER_build_arg_list(n, make, parameter_spec, argument_type) \ - BOOST_PP_REPEAT( \ - n, BOOST_PARAMETER_make_arg_list, (make)(parameter_spec)(argument_type)) \ - mpl::identity<void_> \ - BOOST_PP_REPEAT(n, BOOST_PARAMETER_right_angle, _) - -#define BOOST_PARAMETER_make_deduced_list(z, n, names) \ - BOOST_PP_SEQ_ELEM(0,names)< \ - BOOST_PP_CAT(BOOST_PP_SEQ_ELEM(1,names), n), - -#define BOOST_PARAMETER_build_deduced_list(n, make, parameter_spec) \ - BOOST_PP_REPEAT( \ - n, BOOST_PARAMETER_make_deduced_list, (make)(parameter_spec)) \ - mpl::identity<void_> \ - BOOST_PP_REPEAT(n, BOOST_PARAMETER_right_angle, _) - - struct tag_keyword_arg - { - template <class K, class T> - struct apply - : tag<K,T> - {}; - }; - - struct tag_template_keyword_arg - { - template <class K, class T> - struct apply - { - typedef template_keyword<K,T> type; - }; - }; - -} // namespace aux - -#define BOOST_PARAMETER_FORWARD_TYPEDEF(z, i, names) \ - typedef BOOST_PP_CAT(BOOST_PP_SEQ_ELEM(0,names),i) BOOST_PP_CAT(BOOST_PP_SEQ_ELEM(1,names),i); - -#define BOOST_PARAMETER_FORWARD_TYPEDEFS(n, src, dest) \ - BOOST_PP_REPEAT(n, BOOST_PARAMETER_FORWARD_TYPEDEF, (src)(dest)) - - -#define BOOST_PARAMETER_TEMPLATE_ARGS(z, n, text) class BOOST_PP_CAT(PS, n) = void_ - -template< - class PS0 - , BOOST_PP_ENUM_SHIFTED(BOOST_PARAMETER_MAX_ARITY, BOOST_PARAMETER_TEMPLATE_ARGS, _) -> -struct parameters -{ -#undef BOOST_PARAMETER_TEMPLATE_ARGS - - typedef typename BOOST_PARAMETER_build_deduced_list( - BOOST_PARAMETER_MAX_ARITY, aux::make_deduced_items, PS - )::type deduced_list; - - // if the elements of NamedList match the criteria of overload - // resolution, returns a type which can be constructed from - // parameters. Otherwise, this is not a valid metafunction (no nested - // ::type). - - -#if ! defined(BOOST_NO_SFINAE) && ! BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592)) - // If NamedList satisfies the PS0, PS1, ..., this is a - // metafunction returning parameters. Otherwise it - // has no nested ::type. - template <class ArgumentPackAndError> - struct match_base - : mpl::if_< - // mpl::and_< - // aux::satisfies_requirements_of<NamedList,PS0> - // , mpl::and_< - // aux::satisfies_requirements_of<NamedList,PS1>... - // ..., mpl::true_ - // ...> > - -# define BOOST_PARAMETER_satisfies(z, n, text) \ - mpl::and_< \ - aux::satisfies_requirements_of< \ - typename mpl::first<ArgumentPackAndError>::type \ - , BOOST_PP_CAT(PS, n)> \ - , - mpl::and_< - is_same<typename mpl::second<ArgumentPackAndError>::type, void_> - , BOOST_PP_REPEAT(BOOST_PARAMETER_MAX_ARITY, BOOST_PARAMETER_satisfies, _) - mpl::true_ - BOOST_PP_REPEAT(BOOST_PARAMETER_MAX_ARITY, BOOST_PARAMETER_right_angle, _) - > - -# undef BOOST_PARAMETER_satisfies - - , mpl::identity<parameters> - , void_ - > - {}; -#endif - - // Specializations are to be used as an optional argument to - // eliminate overloads via SFINAE - template< -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - // Borland simply can't handle default arguments in member - // class templates. People wishing to write portable code can - // explicitly specify BOOST_PARAMETER_MAX_ARITY arguments - BOOST_PP_ENUM_PARAMS(BOOST_PARAMETER_MAX_ARITY, class A) -#else - BOOST_PP_ENUM_BINARY_PARAMS( - BOOST_PARAMETER_MAX_ARITY, class A, = void_ BOOST_PP_INTERCEPT - ) -#endif - > - struct match -# if ! defined(BOOST_NO_SFINAE) && ! BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592)) - : match_base< - typename aux::make_arg_list< - typename BOOST_PARAMETER_build_arg_list( - BOOST_PARAMETER_MAX_ARITY, aux::make_items, PS, A - )::type - , deduced_list - , aux::tag_keyword_arg - , mpl::false_ // Don't emit errors when doing SFINAE - >::type - >::type - {}; -# else - { - typedef parameters< - BOOST_PP_ENUM_PARAMS(BOOST_PARAMETER_MAX_ARITY, PS) - > type; - }; -# endif - - // Metafunction that returns an ArgumentPack. - - // TODO, bind has to instantiate the error type in the result - // of make_arg_list. - - template < -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - // Borland simply can't handle default arguments in member - // class templates. People wishing to write portable code can - // explicitly specify BOOST_PARAMETER_MAX_ARITY arguments - BOOST_PP_ENUM_PARAMS(BOOST_PARAMETER_MAX_ARITY, class A) -#else - BOOST_PP_ENUM_BINARY_PARAMS( - BOOST_PARAMETER_MAX_ARITY, class A, = void_ BOOST_PP_INTERCEPT - ) -#endif - > - struct bind - { - typedef typename aux::make_arg_list< - typename BOOST_PARAMETER_build_arg_list( - BOOST_PARAMETER_MAX_ARITY, aux::make_items, PS, A - )::type - , deduced_list - , aux::tag_template_keyword_arg - >::type result; - - typedef typename mpl::first<result>::type type; - }; - - BOOST_PARAMETER_FORWARD_TYPEDEFS(BOOST_PARAMETER_MAX_ARITY, PS, parameter_spec) - - // - // The function call operator is used to build an arg_list that - // labels the positional parameters and maintains whatever other - // tags may have been specified by the caller. - // - // !!!NOTE!!! - // - // The make_arg_list<> produces a reversed arg_list, so - // we need to pass the arguments to its constructor - // reversed. - // - aux::empty_arg_list operator()() const - { - return aux::empty_arg_list(); - } - - template<class A0> - typename mpl::first< - typename aux::make_arg_list< - aux::item< - PS0,A0 - > - , deduced_list - , aux::tag_keyword_arg - >::type - >::type - operator()(A0& a0) const - { - typedef typename aux::make_arg_list< - aux::item< - PS0,A0 - > - , deduced_list - , aux::tag_keyword_arg - >::type result; - - typedef typename mpl::first<result>::type result_type; - typedef typename mpl::second<result>::type error; - error(); - - return result_type( - a0 - // , void_(), void_(), void_() ... - BOOST_PP_ENUM_TRAILING_PARAMS( - BOOST_PP_SUB(BOOST_PARAMETER_MAX_ARITY, 1) - , aux::void_reference() BOOST_PP_INTERCEPT) - ); - } - - template<class A0, class A1> - typename mpl::first< - typename aux::make_arg_list< - aux::item< - PS0,A0 - , aux::item< - PS1,A1 - > - > - , deduced_list - , aux::tag_keyword_arg - >::type - >::type - operator()(A0& a0, A1& a1) const - { - typedef typename aux::make_arg_list< - aux::item< - PS0,A0 - , aux::item< - PS1,A1 - > - > - , deduced_list - , aux::tag_keyword_arg - >::type result; - - typedef typename mpl::first<result>::type result_type; - typedef typename mpl::second<result>::type error; - error(); - - return result_type( - a1,a0 - // , void_(), void_() ... - BOOST_PP_ENUM_TRAILING_PARAMS( - BOOST_PP_SUB(BOOST_PARAMETER_MAX_ARITY, 2) - , aux::void_reference() BOOST_PP_INTERCEPT) - ); - } - - // Higher arities are handled by the preprocessor -#define BOOST_PP_ITERATION_PARAMS_1 (3,( \ - 3,BOOST_PARAMETER_MAX_ARITY,<boost/parameter/aux_/overloads.hpp> \ - )) -#include BOOST_PP_ITERATE() - -}; - -} // namespace parameter - -} // namespace boost - -#endif // BOOST_PARAMETERS_031014_HPP - |