EVOLUTION-MANAGER
Edit File: integral_c.hpp
/////////////////////////////////////////////////////////////////////////////// /// \file integral_c.hpp /// Contains definition of the integral_c transform and friends. // // 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) #ifndef BOOST_PROTO_TRANSFORM_INTEGRAL_C_HPP_EAN_04_28_2011 #define BOOST_PROTO_TRANSFORM_INTEGRAL_C_HPP_EAN_04_28_2011 #include <boost/proto/proto_fwd.hpp> #include <boost/proto/transform/impl.hpp> namespace boost { namespace proto { /// \brief A PrimitiveTransform that returns a specified /// integral constant /// template<typename T, T I> struct integral_c : transform<integral_c<T, I> > { template<typename Expr, typename State, typename Data> struct impl : transform_impl<Expr, State, Data> { typedef T result_type; /// \return \c I /// \throw nothrow T operator()( typename impl::expr_param , typename impl::state_param , typename impl::data_param ) const { return I; } }; }; /// \brief A PrimitiveTransform that returns a specified /// char /// template<char I> struct char_ : integral_c<char, I> {}; /// \brief A PrimitiveTransform that returns a specified /// int /// template<int I> struct int_ : integral_c<int, I> {}; /// \brief A PrimitiveTransform that returns a specified /// long /// template<long I> struct long_ : integral_c<long, I> {}; /// \brief A PrimitiveTransform that returns a specified /// std::size_t /// template<std::size_t I> struct size_t : integral_c<std::size_t, I> {}; /// INTERNAL ONLY /// template<typename T, T I> struct is_callable<integral_c<T, I> > : mpl::true_ {}; /// INTERNAL ONLY /// template<char I> struct is_callable<char_<I> > : mpl::true_ {}; /// INTERNAL ONLY /// template<int I> struct is_callable<int_<I> > : mpl::true_ {}; /// INTERNAL ONLY /// template<long I> struct is_callable<long_<I> > : mpl::true_ {}; /// INTERNAL ONLY /// template<std::size_t I> struct is_callable<size_t<I> > : mpl::true_ {}; }} #endif