1 /*=============================================================================
2 Copyright (c) 2017 Paul Fultz II
4 Distributed under the Boost Software License, Version 1.0. (See accompanying
5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 ==============================================================================*/
7 #include <boost/hof/repeat_while.hpp>
8 #include <boost/hof/reveal.hpp>
11 // TODO: Test default construction, and static initialization
13 struct increment_constant
16 constexpr std::integral_constant
<int, T::value
+ 1> operator()(T
) const noexcept
18 return std::integral_constant
<int, T::value
+ 1>();
25 constexpr T
operator()(T x
) const noexcept
34 constexpr std::integral_constant
<bool, (T::value
!= 6)>
35 operator()(T
) const noexcept
37 return std::integral_constant
<bool, (T::value
!= 6)>();
44 constexpr bool operator()(T x
) const noexcept
53 constexpr bool operator()(T x
) const
55 return x
!= (BOOST_HOF_RECURSIVE_CONSTEXPR_DEPTH
+4);
59 #if BOOST_HOF_HAS_NOEXCEPT_DEDUCTION
62 static_assert(noexcept(boost::hof::repeat_while(not_6())(increment())(1)), "noexcept repeat_while");
63 static_assert(noexcept(boost::hof::repeat_while(not_6_constant())(increment_constant())(std::integral_constant
<int, 1>())), "noexcept repeat_while");
72 std::integral_constant
<int, 6>,
73 decltype(boost::hof::repeat_while(not_6_constant())(increment_constant())(std::integral_constant
<int, 1>()))
78 std::integral_constant
<int, 6> x
= boost::hof::repeat_while(not_6_constant())(increment_constant())(std::integral_constant
<int, 1>());
79 boost::hof::test::unused(x
);
84 BOOST_HOF_STATIC_TEST_CHECK(boost::hof::repeat_while(not_6())(increment())(1) == 6);
85 BOOST_HOF_TEST_CHECK(boost::hof::repeat_while(not_6())(increment())(1) == 6);
86 BOOST_HOF_TEST_CHECK(boost::hof::reveal(boost::hof::repeat_while(not_6())(increment()))(1) == 6);
91 BOOST_HOF_TEST_CHECK(boost::hof::repeat_while(not_limit())(increment())(1) == BOOST_HOF_RECURSIVE_CONSTEXPR_DEPTH
+4);
92 #if BOOST_HOF_HAS_RELAXED_CONSTEXPR
93 BOOST_HOF_STATIC_TEST_CHECK(boost::hof::repeat_while(not_limit())(increment())(1) == BOOST_HOF_RECURSIVE_CONSTEXPR_DEPTH
+4);