From f9594f92950ee97f87dd6dde1036aca40b4068d2 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Sun, 16 Dec 2018 18:33:07 +0200 Subject: [PATCH] Test mp_for_each with a long list of types --- test/mp_for_each.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/test/mp_for_each.cpp b/test/mp_for_each.cpp index 1335265..72854a7 100644 --- a/test/mp_for_each.cpp +++ b/test/mp_for_each.cpp @@ -28,8 +28,15 @@ struct F CONSTEXPR14 void operator()( char ) { s = s * 10 + 3; } }; +struct G +{ + std::size_t s; + CONSTEXPR14 void operator()( std::size_t i ) { s += i; } +}; + using boost::mp11::mp_list; using boost::mp11::mp_for_each; +using boost::mp11::mp_iota_c; int main() { @@ -45,6 +52,22 @@ int main() BOOST_TEST_EQ( (mp_for_each>( F{0} ).s), 12 ); +#if BOOST_MP11_WORKAROUND( BOOST_MP11_MSVC, <= 1800 ) +#else + + using L = mp_iota_c<1024>; + std::size_t const R = 523776; + + BOOST_TEST_EQ( (mp_for_each( G{0} ).s), R ); + + { + G g{0}; + mp_for_each( g ); + BOOST_TEST_EQ( g.s, R ); + } + +#endif + #if defined( BOOST_MP11_NO_CONSTEXPR ) || ( !defined( __GLIBCXX__ ) && __cplusplus < 201400L ) #else @@ -64,6 +87,9 @@ int main() constexpr auto r3 = mp_for_each>( F{0} ); static_assert( r3.s == 12, "r3.s == 12" ); + constexpr auto r4 = mp_for_each( G{0} ); + static_assert( r4.s == R, "r4.s == R" ); + #endif return boost::report_errors();