Chris@16: /*============================================================================= Chris@16: Copyright (c) 2007 Tobias Schwinger Chris@16: Chris@16: Use modification and distribution are subject to the Boost Software Chris@16: License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at Chris@16: http://www.boost.org/LICENSE_1_0.txt). Chris@16: ==============================================================================*/ Chris@16: Chris@16: #ifndef BOOST_FUNCTIONAL_VALUE_FACTORY_HPP_INCLUDED Chris@16: # ifndef BOOST_PP_IS_ITERATING Chris@16: Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: Chris@16: # ifndef BOOST_FUNCTIONAL_VALUE_FACTORY_MAX_ARITY Chris@16: # define BOOST_FUNCTIONAL_VALUE_FACTORY_MAX_ARITY 10 Chris@16: # elif BOOST_FUNCTIONAL_VALUE_FACTORY_MAX_ARITY < 3 Chris@16: # undef BOOST_FUNCTIONAL_VALUE_FACTORY_MAX_ARITY Chris@16: # define BOOST_FUNCTIONAL_VALUE_FACTORY_MAX_ARITY 3 Chris@16: # endif Chris@16: Chris@16: namespace boost Chris@16: { Chris@16: template< typename T > Chris@16: class value_factory; Chris@16: Chris@16: //----- ---- --- -- - - - - Chris@16: Chris@16: template< typename T > Chris@16: class value_factory Chris@16: { Chris@16: public: Chris@16: typedef T result_type; Chris@16: Chris@16: value_factory() Chris@16: { } Chris@16: Chris@16: # define BOOST_PP_FILENAME_1 Chris@16: # define BOOST_PP_ITERATION_LIMITS (0,BOOST_FUNCTIONAL_VALUE_FACTORY_MAX_ARITY) Chris@16: # include BOOST_PP_ITERATE() Chris@16: }; Chris@16: Chris@16: template< typename T > class value_factory; Chris@16: // forbidden, would create a dangling reference Chris@16: } Chris@16: # define BOOST_FUNCTIONAL_VALUE_FACTORY_HPP_INCLUDED Chris@16: # else // defined(BOOST_PP_IS_ITERATING) Chris@16: Chris@16: # define N BOOST_PP_ITERATION() Chris@16: # if N > 0 Chris@16: template< BOOST_PP_ENUM_PARAMS(N, typename T) > Chris@16: # endif Chris@16: inline result_type operator()(BOOST_PP_ENUM_BINARY_PARAMS(N,T,& a)) const Chris@16: { Chris@16: return result_type(BOOST_PP_ENUM_PARAMS(N,a)); Chris@16: } Chris@16: # undef N Chris@16: Chris@16: # endif // defined(BOOST_PP_IS_ITERATING) Chris@16: Chris@16: #endif // include guard Chris@16: