Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/phoenix/object/const_cast.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/phoenix/object/const_cast.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,64 @@ +/*============================================================================== + Copyright (c) 2001-2010 Joel de Guzman + Copyright (c) 2010 Thomas Heller + + 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_PHOENIX_OBJECT_CONST_CAST_HPP +#define BOOST_PHOENIX_OBJECT_CONST_CAST_HPP + +#include <boost/phoenix/core/limits.hpp> +#include <boost/phoenix/core/call.hpp> +#include <boost/phoenix/core/expression.hpp> +#include <boost/phoenix/core/meta_grammar.hpp> +#include <boost/phoenix/object/detail/target.hpp> +#include <boost/proto/transform/lazy.hpp> + +BOOST_PHOENIX_DEFINE_EXPRESSION( + (boost)(phoenix)(const_cast_) + , (proto::terminal<detail::target<proto::_> >) + (meta_grammar) +) + +namespace boost { namespace phoenix +{ + struct const_cast_eval + { + template <typename Sig> + struct result; + + template <typename This, typename Target, typename Source, typename Context> + struct result<This(Target, Source, Context)> + : detail::result_of::target<Target> + {}; + + template <typename Target, typename Source, typename Context> + typename detail::result_of::target<Target>::type + operator()(Target, Source const& u, Context const& ctx) const + { + return + const_cast< + typename detail::result_of::target<Target>::type + >(boost::phoenix::eval(u, ctx)); + } + }; + + template <typename Dummy> + struct default_actions::when<rule::const_cast_, Dummy> + : call<const_cast_eval, Dummy> + {}; + + template <typename T, typename U> + inline + typename expression::const_cast_<detail::target<T>, U>::type const + const_cast_(U const& u) + { + return + expression:: + const_cast_<detail::target<T>, U>:: + make(detail::target<T>(), u); + } +}} + +#endif