1
0
forked from boostorg/mp11

Test mp_for_each with a long list of types

This commit is contained in:
Peter Dimov
2018-12-16 18:33:07 +02:00
parent dbe0378d65
commit f9594f9295

View File

@@ -28,8 +28,15 @@ struct F
CONSTEXPR14 void operator()( char ) { s = s * 10 + 3; } 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_list;
using boost::mp11::mp_for_each; using boost::mp11::mp_for_each;
using boost::mp11::mp_iota_c;
int main() int main()
{ {
@@ -45,6 +52,22 @@ int main()
BOOST_TEST_EQ( (mp_for_each<std::pair<int, short>>( F{0} ).s), 12 ); BOOST_TEST_EQ( (mp_for_each<std::pair<int, short>>( 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<L>( G{0} ).s), R );
{
G g{0};
mp_for_each<L>( g );
BOOST_TEST_EQ( g.s, R );
}
#endif
#if defined( BOOST_MP11_NO_CONSTEXPR ) || ( !defined( __GLIBCXX__ ) && __cplusplus < 201400L ) #if defined( BOOST_MP11_NO_CONSTEXPR ) || ( !defined( __GLIBCXX__ ) && __cplusplus < 201400L )
#else #else
@@ -64,6 +87,9 @@ int main()
constexpr auto r3 = mp_for_each<std::pair<int, short>>( F{0} ); constexpr auto r3 = mp_for_each<std::pair<int, short>>( F{0} );
static_assert( r3.s == 12, "r3.s == 12" ); static_assert( r3.s == 12, "r3.s == 12" );
constexpr auto r4 = mp_for_each<L>( G{0} );
static_assert( r4.s == R, "r4.s == R" );
#endif #endif
return boost::report_errors(); return boost::report_errors();