Chris@16: /*============================================================================== Chris@16: Copyright (c) 2010 Thomas Heller Chris@16: Copyright (c) 2010 Eric Niebler Chris@16: Chris@16: Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: ==============================================================================*/ Chris@16: #ifndef BOOST_PHOENIX_CORE_ARITY_HPP Chris@16: #define BOOST_PHOENIX_CORE_ARITY_HPP Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { namespace phoenix Chris@16: { Chris@16: ///////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // Calculate the arity of an expression using proto transforms Chris@16: // Chris@16: ///////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: struct arity; Chris@16: Chris@16: namespace result_of Chris@16: { Chris@16: template Chris@16: struct arity Chris@16: : mpl::int_< Chris@16: evaluator::impl< Chris@16: Expr const& Chris@16: , vector2< Chris@16: mpl::int_<0> Chris@16: , boost::phoenix::arity Chris@16: >& Chris@16: , proto::empty_env Chris@16: >::result_type::value Chris@16: > Chris@16: {}; Chris@16: } Chris@16: Chris@16: struct arity Chris@16: { Chris@16: template Chris@16: struct when Chris@16: : proto::fold< Chris@16: proto::_ Chris@16: , mpl::int_<0> Chris@16: , proto::make Chris@16: ) Chris@16: > Chris@16: >()> Chris@16: > Chris@16: {}; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct arity::when Chris@16: : proto::make()> Chris@16: {}; Chris@16: Chris@16: template Chris@16: struct arity::when Chris@16: : proto::make()> Chris@16: {}; Chris@16: Chris@16: template Chris@16: struct arity::when Chris@16: : proto::make()> Chris@16: {}; Chris@16: }} Chris@16: Chris@16: #endif