/*============================================================================== Copyright (c) 2010 Thomas Heller Copyright (c) 2010 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) ==============================================================================*/ #ifndef BOOST_PHOENIX_CORE_ARITY_HPP #define BOOST_PHOENIX_CORE_ARITY_HPP #include #include #include #include #include #include #include #include #include namespace boost { namespace phoenix { ///////////////////////////////////////////////////////////////////////////// // // Calculate the arity of an expression using proto transforms // ///////////////////////////////////////////////////////////////////////////// struct arity; namespace result_of { template struct arity : mpl::int_< evaluator::impl< Expr const& , vector2< mpl::int_<0> , boost::phoenix::arity >& , proto::empty_env >::result_type::value > {}; } struct arity { template struct when : proto::fold< proto::_ , mpl::int_<0> , proto::make ) > >()> > {}; }; template struct arity::when : proto::make()> {}; template struct arity::when : proto::make()> {}; template struct arity::when : proto::make()> {}; }} #endif