| /*============================================================================== |
| Copyright (c) 2001-2010 Joel de Guzman |
| Copyright (c) 2010 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_PHOENIX_FUNCTION_FUNCTION_HPP |
| #define BOOST_PHOENIX_FUNCTION_FUNCTION_HPP |
| |
| //#include <boost/phoenix/function/function_handling.hpp> |
| #include <boost/phoenix/core/detail/function_eval.hpp> |
| #include <boost/preprocessor/facilities/expand.hpp> |
| #include <boost/preprocessor/logical/or.hpp> |
| #include <boost/utility/result_of.hpp> |
| |
| namespace boost { namespace phoenix |
| { |
| ///////////////////////////////////////////////////////////////////////////// |
| // Functions |
| ///////////////////////////////////////////////////////////////////////////// |
| |
| // functor which returns our lazy function call extension |
| template<typename F> |
| struct function |
| { |
| function() {} |
| |
| function(F f) |
| : f(f) |
| {} |
| |
| template <typename Sig> |
| struct result; |
| |
| typename detail::expression::function_eval<F>::type const |
| operator()() const |
| { |
| return detail::expression::function_eval<F>::make(f); |
| } |
| |
| // Bring in the rest |
| #include <boost/phoenix/function/detail/function_operator.hpp> |
| |
| F f; |
| }; |
| } |
| |
| template<typename F> |
| struct result_of<phoenix::function<F>()> |
| : phoenix::detail::expression::function_eval<F> |
| {}; |
| |
| } |
| |
| #endif |
| |