[libcxx-commits] [PATCH] D119329: [libc++] Prepare string.modifiers tests for constexpr

Nikolas Klauser via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Wed Feb 9 08:46:18 PST 2022


philnik added inline comments.


================
Comment at: libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_T_size_size.pass.cpp:1833
+template <class S, class SV>
+void test() {
+  test0<S, SV>();
----------------
ldionne wrote:
> Instead, can you do
> 
> ```
> template <class S, class V>
> _LIBCPP_CONSTEXPR_AFTER_CXX17 void tests() {
>   test0<S, SV>();
>   // ...
>   test31<S, SV>();
> }
> 
> bool check_all() {
>   tests<std::string, std::string_view>();
> #if TEST_STD_VER >= 11
>   tests<std::basic_string<char, std::char_traits<char>, min_allocator<char>>,
>         std::basic_string_view<char, std::char_traits<char>>>();
> #endif
>   return true;
> }
> 
> int main() {
>   check_all();
> #if TEST_STD_VER > 17
>   static_assert(check_all());
> #endif
> }
> ```
> 
> You can also tweak `test31` to be templated like the other ones, I think you only need to use the `SV()` macro and friends in it.
I can't, because you can "only" do about 1 million steps during constant evaluation. If everything is in a single `static_assert()` that limit is reached. I can of course make test 31 a template.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D119329/new/

https://reviews.llvm.org/D119329



More information about the libcxx-commits mailing list