diff options
Diffstat (limited to 'boost/flyweight/detail/is_placeholder_expr.hpp')
-rw-r--r-- | boost/flyweight/detail/is_placeholder_expr.hpp | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/boost/flyweight/detail/is_placeholder_expr.hpp b/boost/flyweight/detail/is_placeholder_expr.hpp new file mode 100644 index 0000000000..a53e8d2dbb --- /dev/null +++ b/boost/flyweight/detail/is_placeholder_expr.hpp @@ -0,0 +1,65 @@ +/* Copyright 2006-2009 Joaquin M Lopez Munoz. + * 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) + * + * See http://www.boost.org/libs/flyweight for library home page. + */ + +#ifndef BOOST_FLYWEIGHT_DETAIL_IS_PLACEHOLDER_EXPR_HPP +#define BOOST_FLYWEIGHT_DETAIL_IS_PLACEHOLDER_EXPR_HPP + +#if defined(_MSC_VER)&&(_MSC_VER>=1200) +#pragma once +#endif + +#include <boost/type_traits/is_same.hpp> +#include <boost/mpl/apply.hpp> +#include <boost/mpl/aux_/lambda_support.hpp> +#include <boost/mpl/not.hpp> +#include <boost/preprocessor/facilities/intercept.hpp> +#include <boost/preprocessor/repetition/enum_params.hpp> + +namespace boost{ + +namespace flyweights{ + +namespace detail{ + +/* is_placeholder_expression<T> indicates whether T is an + * MPL placeholder expression. + */ + +template<typename T> +struct is_placeholder_expression_helper +{ + template< + BOOST_PP_ENUM_PARAMS( + BOOST_MPL_LIMIT_METAFUNCTION_ARITY,typename BOOST_PP_INTERCEPT) + > + struct apply{ + typedef int type; + }; + + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_placeholder_expression_helper,(T)) +}; + +template<typename T> +struct is_placeholder_expression: + mpl::not_<is_same< + typename mpl::apply< + is_placeholder_expression_helper<T>, + BOOST_PP_ENUM_PARAMS( + BOOST_MPL_LIMIT_METAFUNCTION_ARITY,int BOOST_PP_INTERCEPT) + >::type, + int + > > +{}; + +} /* namespace flyweights::detail */ + +} /* namespace flyweights */ + +} /* namespace boost */ + +#endif |