summaryrefslogtreecommitdiff
path: root/libs/phoenix/test/function/lazy_argument_tests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/phoenix/test/function/lazy_argument_tests.cpp')
-rw-r--r--libs/phoenix/test/function/lazy_argument_tests.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/libs/phoenix/test/function/lazy_argument_tests.cpp b/libs/phoenix/test/function/lazy_argument_tests.cpp
new file mode 100644
index 000000000..a45f501f1
--- /dev/null
+++ b/libs/phoenix/test/function/lazy_argument_tests.cpp
@@ -0,0 +1,53 @@
+////////////////////////////////////////////////////////////////////////////
+// lazy_argument_tests.cpp
+//
+// lazy argument tests passing lazy function as argument.
+//
+////////////////////////////////////////////////////////////////////////////
+/*=============================================================================
+ Copyright (c) 2001-2007 Joel de Guzman
+ Copyright (c) 2015 John Fletcher
+
+ 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)
+==============================================================================*/
+
+#include <boost/phoenix/core/limits.hpp>
+
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/phoenix/core.hpp>
+#include <boost/phoenix/function.hpp>
+
+namespace example {
+ struct G {
+
+ template <typename Sig>
+ struct result;
+
+ template <typename This, typename A0>
+ struct result<This(A0)>
+ : boost::remove_reference<A0>
+ {};
+
+ template <typename T>
+ T operator()(T t) const { return ++t; }
+
+ };
+}
+
+typedef boost::phoenix::function<example::G> GG;
+boost::phoenix::function<example::G> gg;
+
+template <typename F,typename T>
+T h(F f, T const& t)
+{
+ return f(t)();
+}
+
+int main()
+{
+ BOOST_TEST( h(gg,1) == 2);
+ BOOST_TEST(( h<GG,int>(gg,1) == 2));
+
+ return boost::report_errors();
+}