You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
111 lines
2.4 KiB
111 lines
2.4 KiB
/////////////////////////////////////////////////////////////////////////////// |
|
/// \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
|
|
|