Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: /// \file args.hpp Chris@16: /// Contains definition of \c term\<\>, \c list1\<\>, \c list2\<\>, ... Chris@16: /// class templates. Chris@16: // Chris@16: // Copyright 2008 Eric Niebler. Distributed under the Boost Chris@16: // Software License, Version 1.0. (See accompanying file Chris@16: // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: #ifndef BOOST_PROTO_ARGS_HPP_EAN_04_01_2005 Chris@16: #define BOOST_PROTO_ARGS_HPP_EAN_04_01_2005 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: #include Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { namespace proto Chris@16: { Chris@16: namespace detail Chris@16: { Chris@16: /// INTERNAL ONLY Chris@16: template Chris@16: struct expr_traits Chris@16: { Chris@16: typedef Expr value_type; Chris@16: typedef Expr &reference; Chris@16: typedef Expr const &const_reference; Chris@16: }; Chris@16: Chris@16: /// INTERNAL ONLY Chris@16: template Chris@16: struct expr_traits Chris@16: { Chris@16: typedef Expr value_type; Chris@16: typedef Expr &reference; Chris@16: typedef Expr &const_reference; Chris@16: }; Chris@16: Chris@16: /// INTERNAL ONLY Chris@16: template Chris@16: struct expr_traits Chris@16: { Chris@16: typedef Expr value_type; Chris@16: typedef Expr const &reference; Chris@16: typedef Expr const &const_reference; Chris@16: }; Chris@16: Chris@16: /// INTERNAL ONLY Chris@16: template Chris@16: struct term_traits Chris@16: { Chris@16: typedef T value_type; Chris@16: typedef T &reference; Chris@16: typedef T const &const_reference; Chris@16: }; Chris@16: Chris@16: /// INTERNAL ONLY Chris@16: template Chris@16: struct term_traits Chris@16: { Chris@16: typedef typename mpl::if_c::value, T &, T>::type value_type; Chris@16: typedef T &reference; Chris@16: typedef T &const_reference; Chris@16: }; Chris@16: Chris@16: /// INTERNAL ONLY Chris@16: template Chris@16: struct term_traits Chris@16: { Chris@16: typedef T value_type; Chris@16: typedef T const &reference; Chris@16: typedef T const &const_reference; Chris@16: }; Chris@16: Chris@16: /// INTERNAL ONLY Chris@16: template Chris@16: struct term_traits Chris@16: { Chris@16: typedef T value_type[N]; Chris@16: typedef T (&reference)[N]; Chris@16: typedef T (&const_reference)[N]; Chris@16: }; Chris@16: Chris@16: /// INTERNAL ONLY Chris@16: template Chris@16: struct term_traits Chris@16: { Chris@16: typedef T value_type[N]; Chris@16: typedef T const (&reference)[N]; Chris@16: typedef T const (&const_reference)[N]; Chris@16: }; Chris@16: Chris@16: /// INTERNAL ONLY Chris@16: template Chris@16: struct term_traits Chris@16: { Chris@16: typedef T value_type[N]; Chris@16: typedef T (&reference)[N]; Chris@16: typedef T const (&const_reference)[N]; Chris@16: }; Chris@16: Chris@16: /// INTERNAL ONLY Chris@16: template Chris@16: struct term_traits Chris@16: { Chris@16: typedef T value_type[N]; Chris@16: typedef T const (&reference)[N]; Chris@16: typedef T const (&const_reference)[N]; Chris@16: }; Chris@16: } Chris@16: Chris@16: namespace argsns_ Chris@16: { Chris@16: // This is where term and all the different listN templates are defined Chris@16: #include Chris@16: } Chris@16: Chris@16: }} Chris@16: Chris@16: #endif Chris@16: