1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- #ifndef BOOST_HOF_GUARD_EVAL_H
- #define BOOST_HOF_GUARD_EVAL_H
- #include <boost/hof/always.hpp>
- #include <boost/hof/identity.hpp>
- #include <boost/hof/first_of.hpp>
- #include <boost/hof/detail/result_of.hpp>
- namespace boost { namespace hof {
- namespace detail {
- struct simple_eval
- {
- template<class F, class... Ts>
- constexpr BOOST_HOF_SFINAE_RESULT(F)
- operator()(F&& f, Ts&&...xs) const BOOST_HOF_SFINAE_RETURNS
- (boost::hof::always_ref(f)(xs...)());
- };
- struct id_eval
- {
- template<class F, class... Ts>
- constexpr BOOST_HOF_SFINAE_RESULT(F, id_<decltype(boost::hof::identity)>)
- operator()(F&& f, Ts&&...xs) const BOOST_HOF_SFINAE_RETURNS
- (boost::hof::always_ref(f)(xs...)(boost::hof::identity));
- };
- }
- BOOST_HOF_DECLARE_STATIC_VAR(eval, boost::hof::first_of_adaptor<detail::simple_eval, detail::id_eval>);
- }}
- #endif
|