1 // Copyright Louis Dionne 2013-2017 2 // Distributed under the Boost Software License, Version 1.0. 3 // (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) 4 5 #include <boost/hana/assert.hpp> 6 #include <boost/hana/fwd/concept/integral_constant.hpp> 7 #include <boost/hana/repeat.hpp> 8 namespace hana = boost::hana; 9 10 11 ////////////////////////////////////////////////////////////////////////////// 12 // Define a simple model of IntegralConstant for use below 13 template <int i> 14 struct constant { 15 static constexpr int value = i; 16 using value_type = int; 17 }; 18 19 namespace boost { namespace hana { 20 template <int i> 21 struct IntegralConstant<constant<i>> { 22 static constexpr bool value = true; 23 }; 24 25 // definition of `to<>` omitted 26 }} 27 ////////////////////////////////////////////////////////////////////////////// 28 function()29void function() { } 30 main()31int main() { 32 int counter = 0; 33 hana::repeat(constant<3>{}, [&] { ++counter; }); 34 BOOST_HANA_RUNTIME_CHECK(counter == 3); 35 36 // Try with a normal function. 37 hana::repeat(constant<3>{}, function); 38 39 // Try with a function pointer. 40 hana::repeat(constant<3>{}, static_cast<void(*)()>(function)); 41 42 // Make sure we don't read from a non-constexpr variable. 43 constant<3> three{}; 44 hana::repeat(three, []{}); 45 } 46