From efbaa77749347d2c28fcece83cf5c9eaf51442c5 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Tue, 16 May 2023 17:02:38 +0300 Subject: [PATCH] Add test/mp_repeat_3.cpp --- include/boost/mp11/detail/mp_plus.hpp | 5 +++- test/Jamfile | 1 + test/mp_repeat_3.cpp | 42 +++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 test/mp_repeat_3.cpp diff --git a/include/boost/mp11/detail/mp_plus.hpp b/include/boost/mp11/detail/mp_plus.hpp index 90ed4c9..5c9417c 100644 --- a/include/boost/mp11/detail/mp_plus.hpp +++ b/include/boost/mp11/detail/mp_plus.hpp @@ -20,7 +20,10 @@ namespace mp11 namespace detail { -#if defined( BOOST_MP11_HAS_FOLD_EXPRESSIONS ) && !BOOST_MP11_WORKAROUND( BOOST_MP11_MSVC, < 1920 ) +#if defined( BOOST_MP11_HAS_FOLD_EXPRESSIONS ) && !BOOST_MP11_WORKAROUND( BOOST_MP11_MSVC, != 0 ) && !BOOST_MP11_WORKAROUND( BOOST_MP11_CLANG, != 0 ) + +// msvc fails with parser stack overflow for large sizeof...(T) +// clang exceeds -fbracket-depth, which defaults to 256 template struct mp_plus_impl { diff --git a/test/Jamfile b/test/Jamfile index 4babd7f..aae6f13 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -86,6 +86,7 @@ run mp_starts_with.cpp ; run mp_starts_with_sf.cpp ; run mp_repeat.cpp ; run mp_repeat_2.cpp ; +run mp_repeat_3.cpp ; run mp_product.cpp ; run mp_drop.cpp ; run mp_iota.cpp ; diff --git a/test/mp_repeat_3.cpp b/test/mp_repeat_3.cpp new file mode 100644 index 0000000..7733d6b --- /dev/null +++ b/test/mp_repeat_3.cpp @@ -0,0 +1,42 @@ +// Copyright 2023 Peter Dimov +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt + +#include +#include +#include +#include +#include + +int main() +{ + using boost::mp11::mp_repeat_c; + using boost::mp11::mp_list; + using boost::mp11::mp_int; + using boost::mp11::mp_plus; + using boost::mp11::mp_apply; + + int const N = 529; + + { + using L1 = mp_repeat_c< mp_list, mp_int<2>>, N >; + using R1 = mp_apply; + + BOOST_TEST_EQ( R1::value, N * 3 ); + } + +#if defined(BOOST_MP11_HAS_TEMPLATE_AUTO) + + using boost::mp11::mp_list_v; + + { + using L1 = mp_repeat_c< mp_list_v<1, 2>, N >; + using R1 = mp_apply; + + BOOST_TEST_EQ( R1::value, N * 3 ); + } + +#endif + + return boost::report_errors(); +}