summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/hof/test/arg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/hof/test/arg.cpp')
-rw-r--r--src/boost/libs/hof/test/arg.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/boost/libs/hof/test/arg.cpp b/src/boost/libs/hof/test/arg.cpp
new file mode 100644
index 00000000..b6343a33
--- /dev/null
+++ b/src/boost/libs/hof/test/arg.cpp
@@ -0,0 +1,53 @@
+/*=============================================================================
+ Copyright (c) 2017 Paul Fultz II
+ arg.cpp
+ 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/hof/arg.hpp>
+#include <boost/hof/is_invocable.hpp>
+#include <type_traits>
+#include "test.hpp"
+
+BOOST_HOF_TEST_CASE()
+{
+ BOOST_HOF_STATIC_TEST_CHECK(boost::hof::arg_c<3>(1,2,3,4,5) == 3);
+ BOOST_HOF_TEST_CHECK( boost::hof::arg_c<3>(1,2,3,4,5) == 3 );
+}
+
+BOOST_HOF_TEST_CASE()
+{
+ BOOST_HOF_STATIC_TEST_CHECK(boost::hof::arg(std::integral_constant<int, 3>())(1,2,3,4,5) == 3);
+ BOOST_HOF_TEST_CHECK( boost::hof::arg(std::integral_constant<int, 3>())(1,2,3,4,5) == 3 );
+}
+
+BOOST_HOF_TEST_CASE()
+{
+ auto at_3 = boost::hof::arg(std::integral_constant<int, 3>());
+ static_assert(boost::hof::is_invocable<decltype(at_3), int, int, int>::value, "Not SFINAE-friendly");
+ static_assert(!boost::hof::is_invocable<decltype(at_3), int, int>::value, "Not SFINAE-friendly");
+ static_assert(!boost::hof::is_invocable<decltype(at_3), int>::value, "Not SFINAE-friendly");
+}
+
+struct foo {};
+
+BOOST_HOF_TEST_CASE()
+{
+ static_assert(!boost::hof::is_invocable<decltype(boost::hof::arg), int>::value, "Not sfinae friendly");
+ static_assert(!boost::hof::is_invocable<decltype(boost::hof::arg), foo>::value, "Not sfinae friendly");
+}
+
+struct copy_throws
+{
+ copy_throws() {}
+ copy_throws(copy_throws const&) {}
+ copy_throws(copy_throws&&) noexcept {}
+};
+#if BOOST_HOF_HAS_NOEXCEPT_DEDUCTION
+BOOST_HOF_TEST_CASE()
+{
+ static_assert(noexcept(boost::hof::arg_c<3>(1,2,3,4,5)), "noexcept arg");
+ static_assert(noexcept(boost::hof::arg(std::integral_constant<int, 3>())(1,2,3,4,5)), "noexcept arg");
+ static_assert(!noexcept(boost::hof::arg(std::integral_constant<int, 3>())(1,2,copy_throws{},4,5)), "noexcept arg");
+}
+#endif