1
0
Fork 0
mirror of https://github.com/bolero-MURAKAMI/Sprout synced 2025-08-03 12:49:50 +00:00

SPROUT_CONFIG_SUPPORT_TEMPORARY_CONTAINER_ITERATION をデフォルトで有効に変更

sprout/type/string.hpp 追加
This commit is contained in:
bolero-MURAKAMI 2012-02-08 23:39:36 +09:00
parent 86073fea83
commit 231910c863
43 changed files with 4816 additions and 16 deletions

87
sprout/breed/eval.hpp Normal file
View file

@ -0,0 +1,87 @@
#ifndef SPROUT_BREED_EVAL_HPP
#define SPROUT_BREED_EVAL_HPP
#include <type_traits>
#include <sprout/config.hpp>
#include <sprout/breed/breed_fwd.hpp>
namespace sprout {
namespace breed {
namespace result_of {
//
// eval
//
template<typename Expr, typename Context>
struct eval {
public:
typedef typename Context::template eval<Expr>::result_type type;
};
} // namespace result_of
namespace functional {
//
// eval
//
struct eval {
public:
SPROUT_BREED_CALLABLE();
public:
template<typename Sig>
struct result;
template<typename This, typename Expr, typename Context>
struct result<This(Expr, Context)> {
typedef typename sprout::breed::result_of::eval<
typename std::remove_reference<Expr>::type,
typename std::remove_reference<Context>::type
>::type type;
};
template<typename Expr, typename Context>
typename sprout::breed::result_of::eval<Expr, Context>::type
operator()(Expr& e, Context& ctx) const {
return typename Context::template eval<Expr>()(e, ctx);
}
template<typename Expr, typename Context>
typename sprout::breed::result_of::eval<Expr, Context>::type
operator()(Expr& e, Context const& ctx) const {
return typename Context::template eval<Expr>()(e, ctx);
}
template<typename Expr, typename Context>
typename sprout::breed::result_of::eval<Expr const, Context>::type
operator()(Expr const& e, Context& ctx) const {
return typename Context::template eval<Expr const>()(e, ctx);
}
template<typename Expr, typename Context>
SPROUT_CONSTEXPR typename sprout::breed::result_of::eval<Expr const, Context>::type
operator()(Expr const& e, Context const& ctx) const {
return typename Context::template eval<Expr const>()(e, ctx);
}
};
} // namespace functional
//
// eval
//
template<typename Expr, typename Context>
typename sprout::breed::result_of::eval<Expr, Context>::type
eval(Expr& e, Context& ctx) {
return typename Context::template eval<Expr>()(e, ctx);
}
template<typename Expr, typename Context>
typename sprout::breed::result_of::eval<Expr, Context>::type
eval(Expr& e, Context const& ctx) {
return typename Context::template eval<Expr>()(e, ctx);
}
template<typename Expr, typename Context>
typename sprout::breed::result_of::eval<Expr const, Context>::type
eval(Expr const& e, Context& ctx) {
return typename Context::template eval<Expr const>()(e, ctx);
}
template<typename Expr, typename Context>
typename sprout::breed::result_of::eval<Expr const, Context>::type
SPROUT_CONSTEXPR eval(Expr const& e, Context const& ctx) {
return typename Context::template eval<Expr const>()(e, ctx);
}
} // namespace breed
} // namespace sprout
#endif // #ifndef SPROUT_BREED_EVAL_HPP