Chris@16: /*============================================================================== Chris@16: Copyright (c) 2001-2010 Joel de Guzman Chris@16: Copyright (c) 2010 Eric Niebler Chris@16: Chris@16: Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: ==============================================================================*/ Chris@16: #ifndef BOOST_PHOENIX_FUNCTION_FUNCTION_HPP Chris@16: #define BOOST_PHOENIX_FUNCTION_FUNCTION_HPP Chris@16: Chris@101: #include Chris@16: //#include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { namespace phoenix Chris@16: { Chris@16: ///////////////////////////////////////////////////////////////////////////// Chris@16: // Functions Chris@16: ///////////////////////////////////////////////////////////////////////////// Chris@101: Chris@101: namespace expression Chris@101: { Chris@101: template Chris@101: struct function Chris@101: : detail::expression::function_eval Chris@101: {}; Chris@101: } Chris@16: Chris@16: // functor which returns our lazy function call extension Chris@16: template Chris@16: struct function Chris@16: { Chris@16: BOOST_CONSTEXPR function() Chris@16: : f() Chris@16: {} Chris@16: Chris@101: BOOST_CONSTEXPR function(F f_) Chris@101: : f(f_) Chris@16: {} Chris@16: Chris@16: template Chris@16: struct result; Chris@16: Chris@16: typename detail::expression::function_eval::type const Chris@16: operator()() const Chris@16: { Chris@16: return detail::expression::function_eval::make(f); Chris@16: } Chris@16: Chris@16: // Bring in the rest Chris@16: #include Chris@16: Chris@16: F f; Chris@16: }; Chris@16: } Chris@16: Chris@16: template Chris@16: struct result_of()> Chris@16: : phoenix::detail::expression::function_eval Chris@16: {}; Chris@16: Chris@16: } Chris@16: Chris@16: #endif Chris@16: