/////////////////////////////////////////////////////////////////////////////// /// \file template_arity.hpp /// Replace all nodes stored by reference by nodes stored by value. // // Copyright 2011 Eric Niebler. 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) // // This file is based on a similar one in MPL from Aleksey Gurtovoy. #ifndef BOOST_PROTO_DETAIL_TEMPLATE_ARITY_HPP_EAN_2011_05_07 #define BOOST_PROTO_DETAIL_TEMPLATE_ARITY_HPP_EAN_2011_05_07 // Somewhat indirect definition of BOOST_PROTO_TEMPLATE_ARITY_PARAM is // to overcome a shortcoming of the Wave tool used to generate the // pre-preprocessed headers. #define BOOST_PROTO_TEMPLATE_ARITY_PARAM BOOST_PROTO_TEMPLATE_ARITY_PARAM2 #define BOOST_PROTO_TEMPLATE_ARITY_PARAM2(param) #if defined(BOOST_PROTO_EXTENDED_TEMPLATE_PARAMETERS_MATCHING) || \ (defined(__WAVE__) && defined(BOOST_PROTO_CREATE_PREPROCESSED_FILES)) #include #include #include #include #include #include #undef BOOST_PROTO_TEMPLATE_ARITY_PARAM2 #define BOOST_PROTO_TEMPLATE_ARITY_PARAM2(param) , param namespace boost { namespace proto { namespace detail { sized_type<1>::type template_arity_helper(...); // Other overloads generated by the preprocessor #include template struct template_arity_impl2 : mpl::int_ {}; template struct template_arity : template_arity_impl2< F , N , sizeof(detail::template_arity_helper((F **)0, (mpl::int_ *)0)) > {}; template struct template_arity_impl2 : template_arity {}; template struct template_arity_impl2 : mpl::int_<-1> {}; }}} #endif // BOOST_PROTO_EXTENDED_TEMPLATE_PARAMETERS_MATCHING #endif // BOOST_PROTO_DETAIL_TEMPLATE_ARITY_HPP_EAN_2011_05_07