diff --git a/libcxx/include/string b/libcxx/include/string --- a/libcxx/include/string +++ b/libcxx/include/string @@ -770,7 +770,10 @@ static_assert(sizeof(__short) == (sizeof(value_type) * (__min_cap + 1)), "__short has an unexpected size."); - union __ulx{__long __lx; __short __lxx;}; + union __ulx { + __long __lx; + __short __lxx; + }; enum {__n_words = sizeof(__ulx) / sizeof(size_type)}; @@ -779,6 +782,7 @@ size_type __words[__n_words]; }; +#ifdef _LIBCPP_CXX03_LANG struct __rep { union @@ -788,6 +792,60 @@ __raw __r; }; }; +#else + // Since C++03, unions can contain members with non-trivial special member functions (C++03 doesn't allow unions to + // contain members with non-trivial special member functions). In this case, the corresponding special member + // function in the union will be deleted and therefore must be explicitly defined. Therefore, to support fancy + // pointers with non-trivial special member functions in __long, we must explicitly define a constructor, copy + // constructor and copy assignment operator in __rep. + struct __rep { + _LIBCPP_CONSTEXPR_SINCE_CXX20 __rep() _NOEXCEPT : __l{} {} + _LIBCPP_CONSTEXPR_SINCE_CXX20 ~__rep() _NOEXCEPT {} + + _LIBCPP_CONSTEXPR_SINCE_CXX20 bool __is_rep_long(const __rep& __str_rep) const _NOEXCEPT { + if (__libcpp_is_constant_evaluated()) + return true; + return __str_rep.__l.__is_long_; + } + + _LIBCPP_CONSTEXPR_SINCE_CXX20 __rep(const __rep& __other) _NOEXCEPT : __l{} { + // For certain fancy pointers such as offset pointers, the value of __l.__data_ will be different for 2 pointers + // pointing to the same object (because the offset is calculated with respect to the pointer itself). Therefore, + // the copy assignment operator of the underlying pointer needs to be explicitly called. For a short string, the + // memory should be directly copied. + if (__is_rep_long(__other)) { + __l.__is_long_ = __other.__l.__is_long_; + __l.__cap_ = __other.__l.__cap_; + __l.__size_ = __other.__l.__size_; + __l.__data_ = __other.__l.__data_; + } else { + for (unsigned __i = 0; __i < __n_words; ++__i) + __r.__words[__i] = __other.__r.__words[__i]; + } + } + + _LIBCPP_CONSTEXPR_SINCE_CXX20 __rep& operator=(const __rep& __other) _NOEXCEPT { + if (this != &__other) { + if (__is_rep_long(__other)) { + __l.__is_long_ = __other.__l.__is_long_; + __l.__cap_ = __other.__l.__cap_; + __l.__size_ = __other.__l.__size_; + __l.__data_ = __other.__l.__data_; + } else { + for (unsigned __i = 0; __i < __n_words; ++__i) + __r.__words[__i] = __other.__r.__words[__i]; + } + } + return *this; + } + + union { + __long __l; + __short __s; + __raw __r; + }; + }; +#endif // _LIBCPP_CXX03_LANG __compressed_pair<__rep, allocator_type> __r_; diff --git a/libcxx/test/libcxx/strings/basic.string/alignof.compile.pass.cpp b/libcxx/test/libcxx/strings/basic.string/alignof.compile.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/alignof.compile.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/alignof.compile.pass.cpp @@ -44,6 +44,9 @@ template using min_string = std::basic_string, min_allocator>; +template +using fancy_string = std::basic_string, fancy_pointer_allocator>; + template using test_string = std::basic_string, test_allocator>; @@ -54,6 +57,7 @@ static_assert(alignof(std::string) == 8, ""); static_assert(alignof(min_string) == 8, ""); +static_assert(alignof(fancy_string) == 8, ""); static_assert(alignof(test_string) == 8, ""); static_assert(alignof(small_string) == 2, ""); @@ -61,11 +65,13 @@ # if __WCHAR_WIDTH__ == 32 static_assert(alignof(std::wstring) == 8, ""); static_assert(alignof(min_string) == 8, ""); +static_assert(alignof(fancy_string) == 8, ""); static_assert(alignof(test_string) == 8, ""); static_assert(alignof(small_string) == 4, ""); # elif __WCHAR_WIDTH__ == 16 static_assert(alignof(std::wstring) == 8, ""); static_assert(alignof(min_string) == 8, ""); +static_assert(alignof(fancy_string) == 8, ""); static_assert(alignof(test_string) == 8, ""); static_assert(alignof(small_string) == 2, ""); # else @@ -76,6 +82,7 @@ # ifndef TEST_HAS_NO_CHAR8_T static_assert(alignof(std::u8string) == 8, ""); static_assert(alignof(min_string) == 8, ""); +static_assert(alignof(fancy_string) == 8, ""); static_assert(alignof(test_string) == 8, ""); static_assert(alignof(small_string) == 2, ""); # endif @@ -85,6 +92,8 @@ static_assert(alignof(std::u32string) == 8, ""); static_assert(alignof(min_string) == 8, ""); static_assert(alignof(min_string) == 8, ""); +static_assert(alignof(fancy_string) == 8, ""); +static_assert(alignof(fancy_string) == 8, ""); static_assert(alignof(test_string) == 8, ""); static_assert(alignof(test_string) == 8, ""); static_assert(alignof(small_string) == 2, ""); @@ -95,6 +104,7 @@ static_assert(alignof(std::string) == 4, ""); static_assert(alignof(min_string) == 4, ""); +static_assert(alignof(fancy_string) == 4, ""); static_assert(alignof(test_string) == 4, ""); static_assert(alignof(small_string) == 2, ""); @@ -102,11 +112,13 @@ # if __WCHAR_WIDTH__ == 32 static_assert(alignof(std::wstring) == 4, ""); static_assert(alignof(min_string) == 4, ""); +static_assert(alignof(fancy_string) == 4, ""); static_assert(alignof(test_string) == 4, ""); static_assert(alignof(small_string) == 4, ""); # elif __WCHAR_WIDTH__ == 16 static_assert(alignof(std::wstring) == 4, ""); static_assert(alignof(min_string) == 4, ""); +static_assert(alignof(fancy_string) == 4, ""); static_assert(alignof(test_string) == 4, ""); static_assert(alignof(small_string) == 2, ""); # else @@ -117,6 +129,7 @@ # ifndef TEST_HAS_NO_CHAR8_T static_assert(alignof(std::u8string) == 4, ""); static_assert(alignof(min_string) == 4, ""); +static_assert(alignof(fancy_string) == 4, ""); static_assert(alignof(test_string) == 4, ""); static_assert(alignof(small_string) == 2, ""); # endif @@ -126,6 +139,8 @@ static_assert(alignof(std::u32string) == 4, ""); static_assert(alignof(min_string) == 4, ""); static_assert(alignof(min_string) == 4, ""); +static_assert(alignof(fancy_string) == 4, ""); +static_assert(alignof(fancy_string) == 4, ""); static_assert(alignof(test_string) == 4, ""); static_assert(alignof(test_string) == 4, ""); static_assert(alignof(small_string) == 4, ""); diff --git a/libcxx/test/libcxx/strings/basic.string/sizeof.compile.pass.cpp b/libcxx/test/libcxx/strings/basic.string/sizeof.compile.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/sizeof.compile.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/sizeof.compile.pass.cpp @@ -42,6 +42,9 @@ template using min_string = std::basic_string, min_allocator >; +template +using fancy_string = std::basic_string, fancy_pointer_allocator >; + template using test_string = std::basic_string, test_allocator >; @@ -52,6 +55,9 @@ static_assert(sizeof(std::string) == 24, ""); static_assert(sizeof(min_string) == 24, ""); +# if TEST_STD_VER >= 11 +static_assert(sizeof(fancy_string) == 24, ""); +# endif static_assert(sizeof(test_string) == 32, ""); static_assert(sizeof(small_string) == 6, ""); @@ -59,11 +65,17 @@ # if __WCHAR_WIDTH__ == 32 static_assert(sizeof(std::wstring) == 24, ""); static_assert(sizeof(min_string) == 24, ""); +# if TEST_STD_VER >= 11 +static_assert(sizeof(fancy_string) == 24, ""); +# endif static_assert(sizeof(test_string) == 32, ""); static_assert(sizeof(small_string) == 12, ""); # elif __WCHAR_WIDTH__ == 16 static_assert(sizeof(std::wstring) == 24, ""); static_assert(sizeof(min_string) == 24, ""); +# if TEST_STD_VER >= 11 +static_assert(sizeof(fancy_string) == 24, ""); +# endif static_assert(sizeof(test_string) == 32, ""); static_assert(sizeof(small_string) == 6, ""); # else @@ -74,6 +86,9 @@ # ifndef TEST_HAS_NO_CHAR8_T static_assert(sizeof(std::u8string) == 24, ""); static_assert(sizeof(min_string) == 24, ""); +# if TEST_STD_VER >= 11 +static_assert(sizeof(fancy_string) == 24, ""); +# endif static_assert(sizeof(test_string) == 32, ""); static_assert(sizeof(small_string) == 6, ""); # endif @@ -83,6 +98,10 @@ static_assert(sizeof(std::u32string) == 24, ""); static_assert(sizeof(min_string) == 24, ""); static_assert(sizeof(min_string) == 24, ""); +# if TEST_STD_VER >= 11 +static_assert(sizeof(fancy_string) == 24, ""); +static_assert(sizeof(fancy_string) == 24, ""); +# endif static_assert(sizeof(test_string) == 32, ""); static_assert(sizeof(test_string) == 32, ""); static_assert(sizeof(small_string) == 6, ""); @@ -93,6 +112,9 @@ static_assert(sizeof(std::string) == 12, ""); static_assert(sizeof(min_string) == 12, ""); +# if TEST_STD_VER >= 11 +static_assert(sizeof(fancy_string) == 12, ""); +# endif static_assert(sizeof(test_string) == 24, ""); static_assert(sizeof(small_string) == 6, ""); @@ -100,11 +122,17 @@ # if __WCHAR_WIDTH__ == 32 static_assert(sizeof(std::wstring) == 12, ""); static_assert(sizeof(min_string) == 12, ""); +# if TEST_STD_VER >= 11 +static_assert(sizeof(fancy_string) == 12, ""); +# endif static_assert(sizeof(test_string) == 24, ""); static_assert(sizeof(small_string) == 12, ""); # elif __WCHAR_WIDTH__ == 16 static_assert(sizeof(std::wstring) == 12, ""); static_assert(sizeof(min_string) == 12, ""); +# if TEST_STD_VER >= 11 +static_assert(sizeof(fancy_string) == 12, ""); +# endif static_assert(sizeof(test_string) == 24, ""); static_assert(sizeof(small_string) == 6, ""); # else @@ -115,6 +143,9 @@ # ifndef TEST_HAS_NO_CHAR8_T static_assert(sizeof(std::u8string) == 12, ""); static_assert(sizeof(min_string) == 12, ""); +# if TEST_STD_VER >= 11 +static_assert(sizeof(fancy_string) == 12, ""); +# endif static_assert(sizeof(test_string) == 24, ""); static_assert(sizeof(small_string) == 6, ""); # endif @@ -124,6 +155,10 @@ static_assert(sizeof(std::u32string) == 12, ""); static_assert(sizeof(min_string) == 12, ""); static_assert(sizeof(min_string) == 12, ""); +# if TEST_STD_VER >= 11 +static_assert(sizeof(fancy_string) == 12, ""); +static_assert(sizeof(fancy_string) == 12, ""); +# endif static_assert(sizeof(test_string) == 24, ""); static_assert(sizeof(test_string) == 24, ""); static_assert(sizeof(small_string) == 6, ""); diff --git a/libcxx/test/libcxx/strings/basic.string/string.access/assert.back.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.access/assert.back.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.access/assert.back.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.access/assert.back.pass.cpp @@ -19,6 +19,7 @@ #include "check_assertion.h" #include "min_allocator.h" +#include "test_allocator.h" template void test() { @@ -29,6 +30,7 @@ int main(int, char**) { test(); test, min_allocator > >(); + test, fancy_pointer_allocator > >(); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.access/assert.cback.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.access/assert.cback.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.access/assert.cback.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.access/assert.cback.pass.cpp @@ -19,6 +19,7 @@ #include "check_assertion.h" #include "min_allocator.h" +#include "test_allocator.h" template void test() { @@ -29,6 +30,7 @@ int main(int, char**) { test(); test, min_allocator > >(); + test, fancy_pointer_allocator > >(); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.access/assert.cfront.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.access/assert.cfront.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.access/assert.cfront.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.access/assert.cfront.pass.cpp @@ -19,6 +19,7 @@ #include "check_assertion.h" #include "min_allocator.h" +#include "test_allocator.h" template void test() { @@ -29,6 +30,7 @@ int main(int, char**) { test(); test, min_allocator > >(); + test, fancy_pointer_allocator > >(); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.access/assert.cindex.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.access/assert.cindex.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.access/assert.cindex.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.access/assert.cindex.pass.cpp @@ -20,6 +20,7 @@ #include "check_assertion.h" #include "min_allocator.h" +#include "test_allocator.h" template void test() { @@ -31,6 +32,7 @@ int main(int, char**) { test(); test, min_allocator > >(); + test, fancy_pointer_allocator > >(); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.access/assert.front.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.access/assert.front.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.access/assert.front.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.access/assert.front.pass.cpp @@ -20,6 +20,7 @@ #include "check_assertion.h" #include "min_allocator.h" +#include "test_allocator.h" template void test() { @@ -30,6 +31,7 @@ int main(int, char**) { test(); test, min_allocator > >(); + test, fancy_pointer_allocator > >(); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.access/assert.index.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.access/assert.index.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.access/assert.index.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.access/assert.index.pass.cpp @@ -20,6 +20,7 @@ #include "check_assertion.h" #include "min_allocator.h" +#include "test_allocator.h" template void test() { @@ -31,6 +32,7 @@ int main(int, char**) { test(); test, min_allocator > >(); + test, fancy_pointer_allocator > >(); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.capacity/PR53170.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.capacity/PR53170.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.capacity/PR53170.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.capacity/PR53170.pass.cpp @@ -31,6 +31,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 bool test() { @@ -75,6 +76,7 @@ #if TEST_STD_VER >= 11 test, min_allocator > >(); + test, fancy_pointer_allocator > >(); #endif #if TEST_STD_VER > 17 diff --git a/libcxx/test/libcxx/strings/basic.string/string.cons/copy_shrunk_long.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.cons/copy_shrunk_long.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.cons/copy_shrunk_long.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.cons/copy_shrunk_long.pass.cpp @@ -34,12 +34,13 @@ int main(int, char**) { test, test_allocator > >(); #if TEST_STD_VER >= 11 - test, min_allocator>>(); + test, min_allocator > >(); + test, fancy_pointer_allocator > >(); #endif #if TEST_STD_VER > 17 - static_assert(test, test_allocator>>()); - static_assert(test, min_allocator>>()); + static_assert(test, test_allocator > >()); + static_assert(test, min_allocator > >()); + static_assert(test, fancy_pointer_allocator > >()); #endif - return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.add.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.add.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.add.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.add.pass.cpp @@ -18,6 +18,7 @@ #include "check_assertion.h" #include "min_allocator.h" +#include "test_allocator.h" template void test() { @@ -32,6 +33,7 @@ int main(int, char**) { test(); test, min_allocator > >(); + test, fancy_pointer_allocator > >(); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.compare.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.compare.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.compare.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.compare.pass.cpp @@ -17,6 +17,7 @@ #include "check_assertion.h" #include "min_allocator.h" +#include "test_allocator.h" template void test() { @@ -28,6 +29,7 @@ int main(int, char**) { test(); test, min_allocator > >(); + test, fancy_pointer_allocator > >(); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.decrement.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.decrement.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.decrement.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.decrement.pass.cpp @@ -18,6 +18,7 @@ #include "check_assertion.h" #include "min_allocator.h" +#include "test_allocator.h" template void test() { @@ -31,6 +32,7 @@ int main(int, char**) { test(); test, min_allocator > >(); + test, fancy_pointer_allocator > >(); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.dereference.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.dereference.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.dereference.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.dereference.pass.cpp @@ -17,6 +17,7 @@ #include "check_assertion.h" #include "min_allocator.h" +#include "test_allocator.h" template void test() { @@ -28,6 +29,7 @@ int main(int, char**) { test(); test, min_allocator > >(); + test, fancy_pointer_allocator > >(); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.increment.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.increment.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.increment.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.increment.pass.cpp @@ -18,6 +18,7 @@ #include "check_assertion.h" #include "min_allocator.h" +#include "test_allocator.h" template void test() { @@ -31,6 +32,7 @@ int main(int, char**) { test(); test, min_allocator > >(); + test, fancy_pointer_allocator > >(); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.index.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.index.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.index.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.index.pass.cpp @@ -18,6 +18,7 @@ #include "check_assertion.h" #include "min_allocator.h" +#include "test_allocator.h" template void test() { @@ -31,6 +32,7 @@ int main(int, char**) { test(); test, min_allocator > >(); + test, fancy_pointer_allocator > >(); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.subtract.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.subtract.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.subtract.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.iterators/debug.iterator.subtract.pass.cpp @@ -17,6 +17,7 @@ #include "check_assertion.h" #include "min_allocator.h" +#include "test_allocator.h" template void test() { @@ -28,6 +29,7 @@ int main(int, char**) { test(); test, min_allocator > >(); + test, fancy_pointer_allocator > >(); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.modifiers/assert.erase_iter.null.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.modifiers/assert.erase_iter.null.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.modifiers/assert.erase_iter.null.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.modifiers/assert.erase_iter.null.pass.cpp @@ -19,6 +19,7 @@ #include "check_assertion.h" #include "min_allocator.h" +#include "test_allocator.h" template void test() { @@ -30,6 +31,7 @@ int main(int, char**) { test(); test, min_allocator > >(); + test, fancy_pointer_allocator > >(); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.modifiers/assert.pop_back.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.modifiers/assert.pop_back.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.modifiers/assert.pop_back.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.modifiers/assert.pop_back.pass.cpp @@ -18,6 +18,7 @@ #include #include "check_assertion.h" +#include "test_allocator.h" template void test() { @@ -27,6 +28,7 @@ int main(int, char**) { test(); + test, fancy_pointer_allocator > >(); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.erase.iter.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.erase.iter.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.erase.iter.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.erase.iter.pass.cpp @@ -17,6 +17,7 @@ #include "check_assertion.h" #include "min_allocator.h" +#include "test_allocator.h" template void test() { @@ -30,6 +31,7 @@ int main(int, char**) { test(); test, min_allocator > >(); + test, fancy_pointer_allocator > >(); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.erase.iter_iter.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.erase.iter_iter.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.erase.iter_iter.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.erase.iter_iter.pass.cpp @@ -17,6 +17,7 @@ #include "check_assertion.h" #include "min_allocator.h" +#include "test_allocator.h" template void test() { @@ -56,6 +57,7 @@ int main(int, char**) { test(); test, min_allocator > >(); + test, fancy_pointer_allocator > >(); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_char.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_char.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_char.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_char.pass.cpp @@ -22,6 +22,7 @@ #include #include "check_assertion.h" +#include "test_allocator.h" template void test() { @@ -34,6 +35,7 @@ int main(int, char**) { test(); + test, fancy_pointer_allocator > >(); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_iter_iter.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_iter_iter.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_iter_iter.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_iter_iter.pass.cpp @@ -17,6 +17,7 @@ #include #include "check_assertion.h" +#include "test_allocator.h" template void test() { @@ -30,6 +31,7 @@ int main(int, char**) { test(); + test, fancy_pointer_allocator > >(); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_size_char.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_size_char.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_size_char.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_size_char.pass.cpp @@ -16,6 +16,7 @@ #include #include "check_assertion.h" +#include "test_allocator.h" template void test() { @@ -27,6 +28,7 @@ int main(int, char**) { test(); + test, fancy_pointer_allocator > >(); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.modifiers/resize_default_initialized.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.modifiers/resize_default_initialized.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.modifiers/resize_default_initialized.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.modifiers/resize_default_initialized.pass.cpp @@ -14,6 +14,7 @@ #include #include "test_macros.h" +#include "test_allocator.h" TEST_CONSTEXPR_CXX20 void write_c_str(char* buf, int size) { for (int i = 0; i < size; ++i) { @@ -67,8 +68,13 @@ int main(int, char**) { test(); +#if TEST_STD_VER >= 11 + test, fancy_pointer_allocator > >(); +#endif + #if TEST_STD_VER > 17 static_assert(test()); + static_assert(test, fancy_pointer_allocator > >()); #endif return 0; diff --git a/libcxx/test/std/strings/basic.string.hash/enabled_hashes.pass.cpp b/libcxx/test/std/strings/basic.string.hash/enabled_hashes.pass.cpp --- a/libcxx/test/std/strings/basic.string.hash/enabled_hashes.pass.cpp +++ b/libcxx/test/std/strings/basic.string.hash/enabled_hashes.pass.cpp @@ -63,6 +63,7 @@ test_hash_enabled_for_type(); test_hash_enabled_for_type(); test_hash_enabled_for_type, test_allocator>>(); + test_hash_enabled_for_type, fancy_pointer_allocator>>(); test_hash_disabled_for_type, std::allocator>>(); test_hash_disabled_for_type, std::allocator>>(); } diff --git a/libcxx/test/std/strings/basic.string/string.access/at.pass.cpp b/libcxx/test/std/strings/basic.string/string.access/at.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.access/at.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.access/at.pass.cpp @@ -16,6 +16,7 @@ #include #include "min_allocator.h" +#include "test_allocator.h" #include "make_string.h" #include "test_macros.h" @@ -61,6 +62,7 @@ test_string >(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif } }; diff --git a/libcxx/test/std/strings/basic.string/string.access/back.pass.cpp b/libcxx/test/std/strings/basic.string/string.access/back.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.access/back.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.access/back.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s) { @@ -40,6 +41,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.access/front.pass.cpp b/libcxx/test/std/strings/basic.string/string.access/front.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.access/front.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.access/front.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s) { @@ -40,6 +41,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.access/index.pass.cpp b/libcxx/test/std/strings/basic.string/string.access/index.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.access/index.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.access/index.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test_string() { @@ -38,6 +39,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.capacity/capacity.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/capacity.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.capacity/capacity.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.capacity/capacity.pass.cpp @@ -15,6 +15,7 @@ #include "test_allocator.h" #include "min_allocator.h" +#include "test_allocator.h" #include "test_macros.h" @@ -60,6 +61,7 @@ TEST_CONSTEXPR_CXX20 bool test() { #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.capacity/clear.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/clear.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.capacity/clear.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.capacity/clear.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s) { @@ -40,6 +41,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.capacity/empty.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/empty.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.capacity/empty.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.capacity/empty.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(const S& s) { @@ -33,6 +34,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.capacity/length.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/length.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.capacity/length.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.capacity/length.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(const S& s) { @@ -32,6 +33,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.capacity/max_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/max_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.capacity/max_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.capacity/max_size.pass.cpp @@ -24,6 +24,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test1(const S& s) { @@ -68,6 +69,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; @@ -84,6 +86,7 @@ TEST_CONSTEXPR_CXX20 bool test_constexpr() { test_string_constexpr(); + test_string_constexpr, fancy_pointer_allocator > >(); return true; } diff --git a/libcxx/test/std/strings/basic.string/string.capacity/over_max_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/over_max_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.capacity/over_max_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.capacity/over_max_size.pass.cpp @@ -24,6 +24,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(const S& s) { @@ -49,6 +50,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.capacity/reserve.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/reserve.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.capacity/reserve.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.capacity/reserve.pass.cpp @@ -18,6 +18,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template void test(typename S::size_type min_cap, typename S::size_type erased_index) { @@ -46,6 +47,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.capacity/reserve_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/reserve_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.capacity/reserve_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.capacity/reserve_size.pass.cpp @@ -20,6 +20,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void @@ -77,6 +78,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.capacity/resize_and_overwrite.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/resize_and_overwrite.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.capacity/resize_and_overwrite.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.capacity/resize_and_overwrite.pass.cpp @@ -19,6 +19,7 @@ #include "make_string.h" #include "test_macros.h" +#include "test_allocator.h" template constexpr void test_appending(size_t k, size_t N, size_t new_capacity) { @@ -86,25 +87,35 @@ int main(int, char**) { test_string(); + test_string(); test_string(); + test_string(); test_string(); + test_string(); test_string(); + test_string(); static_assert(test_string()); + static_assert(test_string()); static_assert(test_string()); + static_assert(test_string()); static_assert(test_string()); + static_assert(test_string()); static_assert(test_string()); + static_assert(test_string()); #ifndef TEST_HAS_NO_WIDE_CHARACTERS test_string(); + test_string(); static_assert(test_string()); + static_assert(test_string()); #endif return 0; } diff --git a/libcxx/test/std/strings/basic.string/string.capacity/resize_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/resize_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.capacity/resize_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.capacity/resize_size.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type n, S expected) { @@ -62,6 +63,7 @@ #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.capacity/resize_size_char.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/resize_size_char.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.capacity/resize_size_char.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.capacity/resize_size_char.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type n, typename S::value_type c, S expected) { @@ -63,6 +64,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.capacity/shrink_to_fit.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/shrink_to_fit.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.capacity/shrink_to_fit.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.capacity/shrink_to_fit.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s) { @@ -45,6 +46,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.capacity/size.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.capacity/size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.capacity/size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(const S& s, typename S::size_type c) { @@ -32,6 +33,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.cons/T_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/T_size_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/T_size_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/T_size_size.pass.cpp @@ -144,6 +144,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string(); + test_string(); #endif { using S = std::string; diff --git a/libcxx/test/std/strings/basic.string/string.cons/alloc.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/alloc.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/alloc.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/alloc.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "test_allocator.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test() { @@ -89,6 +90,7 @@ test, test_allocator > >(); #if TEST_STD_VER >= 11 test2, min_allocator > >(); + test2, fancy_pointer_allocator > >(); test2, explicit_allocator > >(); #endif diff --git a/libcxx/test/std/strings/basic.string/string.cons/char_assignment.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/char_assignment.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/char_assignment.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/char_assignment.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s1, typename S::value_type s2) { @@ -36,8 +37,10 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string(); + #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.cons/copy.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/copy.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/copy.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/copy.pass.cpp @@ -49,6 +49,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string(); + test_string(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.cons/copy_alloc.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/copy_alloc.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/copy_alloc.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/copy_alloc.pass.cpp @@ -107,6 +107,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string(); + test_string(); # ifndef TEST_HAS_NO_EXCEPTIONS if (!TEST_IS_CONSTANT_EVALUATED) { diff --git a/libcxx/test/std/strings/basic.string/string.cons/copy_assignment.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/copy_assignment.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/copy_assignment.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/copy_assignment.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s1, const S& s2) { @@ -45,7 +46,8 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string(); #if TEST_STD_VER >= 11 - test_string, min_allocator>>(); + test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif #if TEST_STD_VER >= 11 diff --git a/libcxx/test/std/strings/basic.string/string.cons/default.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/default.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/default.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/default.pass.cpp @@ -22,6 +22,9 @@ LIBCPP_STATIC_ASSERT(std::is_nothrow_default_constructible< std::basic_string, test_allocator > >::value, ""); +LIBCPP_STATIC_ASSERT(std::is_nothrow_default_constructible< + std::basic_string, fancy_pointer_allocator > >::value, + ""); LIBCPP_STATIC_ASSERT(!std::is_nothrow_default_constructible< std::basic_string, limited_allocator > >::value, ""); diff --git a/libcxx/test/std/strings/basic.string/string.cons/dtor.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/dtor.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/dtor.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/dtor.pass.cpp @@ -36,6 +36,9 @@ static_assert(std::is_nothrow_destructible::value, ""); static_assert( std::is_nothrow_destructible< std::basic_string, test_allocator > >::value, ""); +static_assert(std::is_nothrow_destructible< + std::basic_string, fancy_pointer_allocator > >::value, + ""); LIBCPP_STATIC_ASSERT( !std::is_nothrow_destructible< std::basic_string, throwing_alloc > >::value, ""); diff --git a/libcxx/test/std/strings/basic.string/string.cons/initializer_list.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/initializer_list.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/initializer_list.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/initializer_list.pass.cpp @@ -36,6 +36,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string(); test_string(); + test_string(); return true; } diff --git a/libcxx/test/std/strings/basic.string/string.cons/initializer_list_assignment.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/initializer_list_assignment.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/initializer_list_assignment.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/initializer_list_assignment.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test_case() { @@ -28,6 +29,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_case(); test_case, min_allocator > >(); + test_case, fancy_pointer_allocator > >(); return true; } diff --git a/libcxx/test/std/strings/basic.string/string.cons/iter_alloc.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/iter_alloc.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/iter_alloc.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/iter_alloc.pass.cpp @@ -90,6 +90,7 @@ test >(test_allocator(2)); #if TEST_STD_VER >= 11 test >(min_allocator()); + test >(fancy_pointer_allocator()); #endif { static_assert((!std::is_constructible::value), ""); diff --git a/libcxx/test/std/strings/basic.string/string.cons/iter_alloc_deduction.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/iter_alloc_deduction.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/iter_alloc_deduction.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/iter_alloc_deduction.pass.cpp @@ -77,6 +77,11 @@ std::basic_string s1{s, s + 10, std::allocator{}}; test_string(s, std::move(s1)); } + { + const char* s = "12345678901234"; + std::basic_string s1{s, s + 10, fancy_pointer_allocator{}}; + test_string(s, std::move(s1)); + } #ifndef TEST_HAS_NO_WIDE_CHARACTERS { const wchar_t* s = L"12345678901234"; @@ -88,12 +93,22 @@ std::basic_string s1{s, s + 10, min_allocator{}}; test_string(s, std::move(s1)); } + { + const char16_t* s = u"12345678901234"; + std::basic_string s1{s, s + 10, fancy_pointer_allocator{}}; + test_string(s, std::move(s1)); + } #endif { const char32_t* s = U"12345678901234"; std::basic_string s1{s, s + 10, explicit_allocator{}}; test_string(s, std::move(s1)); } + { + const char32_t* s = U"12345678901234"; + std::basic_string s1{s, s + 10, fancy_pointer_allocator{}}; + test_string(s, std::move(s1)); + } return true; } diff --git a/libcxx/test/std/strings/basic.string/string.cons/move.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/move.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/move.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/move.pass.cpp @@ -51,6 +51,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string(); test_string(); + test_string(); return true; } diff --git a/libcxx/test/std/strings/basic.string/string.cons/move_alloc.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/move_alloc.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/move_alloc.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/move_alloc.pass.cpp @@ -76,6 +76,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string(); test_string(); + test_string(); return true; } diff --git a/libcxx/test/std/strings/basic.string/string.cons/move_assign_noexcept.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/move_assign_noexcept.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/move_assign_noexcept.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/move_assign_noexcept.pass.cpp @@ -68,6 +68,10 @@ typedef std::basic_string, test_allocator > C; static_assert(!std::is_nothrow_move_assignable::value, ""); } + { + typedef std::basic_string, fancy_pointer_allocator > C; + static_assert(std::is_nothrow_move_assignable::value, ""); + } { typedef std::basic_string, some_alloc > C; #if TEST_STD_VER > 14 diff --git a/libcxx/test/std/strings/basic.string/string.cons/move_assignment.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/move_assignment.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/move_assignment.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/move_assignment.pass.cpp @@ -49,9 +49,8 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string(); -#if TEST_STD_VER >= 11 test_string, min_allocator > >(); -#endif + test_string, fancy_pointer_allocator > >(); return true; } diff --git a/libcxx/test/std/strings/basic.string/string.cons/move_noexcept.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/move_noexcept.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/move_noexcept.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/move_noexcept.pass.cpp @@ -30,6 +30,10 @@ typedef std::basic_string, test_allocator > C; static_assert(std::is_nothrow_move_constructible::value, ""); } + { + typedef std::basic_string, fancy_pointer_allocator > C; + static_assert(std::is_nothrow_move_constructible::value, ""); + } { typedef std::basic_string, limited_allocator > C; #if TEST_STD_VER <= 14 diff --git a/libcxx/test/std/strings/basic.string/string.cons/pointer_alloc.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/pointer_alloc.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/pointer_alloc.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/pointer_alloc.pass.cpp @@ -66,6 +66,7 @@ test >(test_allocator(2)); #if TEST_STD_VER >= 11 test >(min_allocator()); + test >(fancy_pointer_allocator()); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.cons/pointer_assignment.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/pointer_assignment.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/pointer_assignment.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/pointer_assignment.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s1, const typename S::value_type* s2) { @@ -48,6 +49,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.cons/pointer_size_alloc.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/pointer_size_alloc.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/pointer_size_alloc.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/pointer_size_alloc.pass.cpp @@ -63,6 +63,7 @@ test >(test_allocator(2)); #if TEST_STD_VER >= 11 test >(min_allocator()); + test >(fancy_pointer_allocator()); #endif #if TEST_STD_VER >= 11 diff --git a/libcxx/test/std/strings/basic.string/string.cons/size_char_alloc.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/size_char_alloc.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/size_char_alloc.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/size_char_alloc.pass.cpp @@ -113,6 +113,7 @@ test_string >(); #if TEST_STD_VER >= 11 test_string >(); + test_string >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.cons/string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/string_view.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/string_view.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/string_view.pass.cpp @@ -92,6 +92,7 @@ test_string >(test_allocator(2)); #if TEST_STD_VER >= 11 test_string >(min_allocator()); + test_string >(fancy_pointer_allocator()); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.cons/string_view_assignment.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/string_view_assignment.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/string_view_assignment.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/string_view_assignment.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s1, SV sv) { @@ -48,6 +49,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.cons/string_view_deduction.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/string_view_deduction.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/string_view_deduction.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/string_view_deduction.pass.cpp @@ -66,12 +66,22 @@ std::basic_string s1{sv, std::allocator{}}; test(std::move(sv), std::move(s1)); } + { + std::string_view sv = "12345678901234"; + std::basic_string s1{sv, fancy_pointer_allocator{}}; + test(std::move(sv), std::move(s1)); + } #ifndef TEST_HAS_NO_WIDE_CHARACTERS { std::wstring_view sv = L"12345678901234"; std::basic_string s1{sv, test_allocator{}}; test(std::move(sv), std::move(s1)); } + { + std::wstring_view sv = L"12345678901234"; + std::basic_string s1{sv, fancy_pointer_allocator{}}; + test(std::move(sv), std::move(s1)); + } #endif #ifndef TEST_HAS_NO_CHAR8_T { @@ -79,6 +89,11 @@ std::basic_string s1{sv, min_allocator{}}; test(std::move(sv), std::move(s1)); } + { + std::u8string_view sv = u8"12345678901234"; + std::basic_string s1{sv, fancy_pointer_allocator{}}; + test(std::move(sv), std::move(s1)); + } #endif { std::u16string_view sv = u"12345678901234"; @@ -90,6 +105,11 @@ std::basic_string s1{sv, explicit_allocator{}}; test(std::move(sv), std::move(s1)); } + { + std::u32string_view sv = U"12345678901234"; + std::basic_string s1{sv, fancy_pointer_allocator{}}; + test(std::move(sv), std::move(s1)); + } return true; } diff --git a/libcxx/test/std/strings/basic.string/string.cons/string_view_size_size_deduction.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/string_view_size_size_deduction.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/string_view_size_size_deduction.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/string_view_size_size_deduction.pass.cpp @@ -68,18 +68,27 @@ std::basic_string s1{sv, 0, 4}; test(std::move(sv), std::move(s1)); } - { std::string_view sv = "12345678901234"; std::basic_string s1{sv, 0, 4, std::allocator{}}; test(std::move(sv), std::move(s1)); } + { + std::string_view sv = "12345678901234"; + std::basic_string s1{sv, 0, 4, fancy_pointer_allocator{}}; + test(std::move(sv), std::move(s1)); + } #ifndef TEST_HAS_NO_WIDE_CHARACTERS { std::wstring_view sv = L"12345678901234"; std::basic_string s1{sv, 0, 4, test_allocator{}}; test(std::move(sv), std::move(s1)); } + { + std::wstring_view sv = L"12345678901234"; + std::basic_string s1{sv, 0, 4, fancy_pointer_allocator{}}; + test(std::move(sv), std::move(s1)); + } #endif #ifndef TEST_HAS_NO_CHAR8_T { @@ -87,6 +96,11 @@ std::basic_string s1{sv, 0, 4, min_allocator{}}; test(std::move(sv), std::move(s1)); } + { + std::u8string_view sv = u8"12345678901234"; + std::basic_string s1{sv, 0, 4, fancy_pointer_allocator{}}; + test(std::move(sv), std::move(s1)); + } #endif { std::u16string_view sv = u"12345678901234"; @@ -98,6 +112,11 @@ std::basic_string s1{sv, 0, 4, explicit_allocator{}}; test(std::move(sv), std::move(s1)); } + { + std::u32string_view sv = U"12345678901234"; + std::basic_string s1{sv, 0, 4, fancy_pointer_allocator{}}; + test(std::move(sv), std::move(s1)); + } return true; } diff --git a/libcxx/test/std/strings/basic.string/string.cons/substr.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/substr.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/substr.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/substr.pass.cpp @@ -203,7 +203,10 @@ test_string(); test_string(); #if TEST_STD_VER >= 11 - { test_string(); } + { + test_string(); + test_string(); + } #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.cons/substr_rvalue.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/substr_rvalue.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.cons/substr_rvalue.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/substr_rvalue.pass.cpp @@ -202,6 +202,7 @@ test_string>>(std::allocator{}); test_string>>(min_allocator{}); test_string>>(test_allocator{42}); + test_string>>(fancy_pointer_allocator{}); } template diff --git a/libcxx/test/std/strings/basic.string/string.contains/contains.char.pass.cpp b/libcxx/test/std/strings/basic.string/string.contains/contains.char.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.contains/contains.char.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.contains/contains.char.pass.cpp @@ -15,6 +15,7 @@ #include #include "test_macros.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test_string() { @@ -33,6 +34,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string(); + test_string, fancy_pointer_allocator > >(); return true; } diff --git a/libcxx/test/std/strings/basic.string/string.contains/contains.ptr.pass.cpp b/libcxx/test/std/strings/basic.string/string.contains/contains.ptr.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.contains/contains.ptr.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.contains/contains.ptr.pass.cpp @@ -15,6 +15,7 @@ #include #include "test_macros.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test_string() { @@ -63,6 +64,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string(); + test_string, fancy_pointer_allocator > >(); return true; } diff --git a/libcxx/test/std/strings/basic.string/string.contains/contains.string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.contains/contains.string_view.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.contains/contains.string_view.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.contains/contains.string_view.pass.cpp @@ -15,6 +15,7 @@ #include #include "test_macros.h" +#include "test_allocator.h" template class Alloc> TEST_CONSTEXPR_CXX20 void test_string() { @@ -86,6 +87,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string(); + test_string(); return true; } diff --git a/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.char.pass.cpp b/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.char.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.char.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.char.pass.cpp @@ -15,6 +15,7 @@ #include #include "test_macros.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test_string() { @@ -31,6 +32,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string(); + test_string, fancy_pointer_allocator > >(); return true; } diff --git a/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.ptr.pass.cpp b/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.ptr.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.ptr.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.ptr.pass.cpp @@ -15,6 +15,7 @@ #include #include "test_macros.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test_string() { @@ -60,6 +61,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string(); + test_string, fancy_pointer_allocator > >(); return true; } diff --git a/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.string_view.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.string_view.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.string_view.pass.cpp @@ -15,6 +15,7 @@ #include #include "test_macros.h" +#include "test_allocator.h" template class Alloc> TEST_CONSTEXPR_CXX20 void test_string() { @@ -70,6 +71,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string(); + test_string(); return true; } diff --git a/libcxx/test/std/strings/basic.string/string.iterators/begin.pass.cpp b/libcxx/test/std/strings/basic.string/string.iterators/begin.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.iterators/begin.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.iterators/begin.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s) { @@ -38,6 +39,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.iterators/cbegin.pass.cpp b/libcxx/test/std/strings/basic.string/string.iterators/cbegin.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.iterators/cbegin.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.iterators/cbegin.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(const S& s) { @@ -35,6 +36,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.iterators/cend.pass.cpp b/libcxx/test/std/strings/basic.string/string.iterators/cend.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.iterators/cend.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.iterators/cend.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(const S& s) { @@ -32,6 +33,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.iterators/crbegin.pass.cpp b/libcxx/test/std/strings/basic.string/string.iterators/crbegin.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.iterators/crbegin.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.iterators/crbegin.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(const S& s) { @@ -35,6 +36,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.iterators/crend.pass.cpp b/libcxx/test/std/strings/basic.string/string.iterators/crend.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.iterators/crend.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.iterators/crend.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(const S& s) { @@ -32,6 +33,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.iterators/end.pass.cpp b/libcxx/test/std/strings/basic.string/string.iterators/end.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.iterators/end.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.iterators/end.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s) { @@ -41,6 +42,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.iterators/rbegin.pass.cpp b/libcxx/test/std/strings/basic.string/string.iterators/rbegin.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.iterators/rbegin.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.iterators/rbegin.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s) { @@ -38,6 +39,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.iterators/rend.pass.cpp b/libcxx/test/std/strings/basic.string/string.iterators/rend.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.iterators/rend.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.iterators/rend.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s) { @@ -41,6 +42,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/robust_against_adl.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/robust_against_adl.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/robust_against_adl.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/robust_against_adl.pass.cpp @@ -12,6 +12,7 @@ #include #include "test_macros.h" +#include "test_allocator.h" struct Incomplete; template @@ -39,6 +40,9 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string(); +#if TEST_STD_VER >= 11 + test_string, fancy_pointer_allocator > >(); +#endif return true; } diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/T_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/T_size_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/T_size_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/T_size_size.pass.cpp @@ -18,6 +18,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, SV sv, typename S::size_type pos, typename S::size_type n, S expected) { @@ -86,6 +87,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif { diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/initializer_list.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/initializer_list.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/initializer_list.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/initializer_list.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test_string() { @@ -27,9 +28,8 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string(); -#if TEST_STD_VER >= 11 test_string, min_allocator > >(); -#endif + test_string, fancy_pointer_allocator > >(); return true; } diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "test_iterators.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, It first, It last, S expected) { @@ -144,6 +145,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif #ifndef TEST_HAS_NO_EXCEPTIONS diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, const typename S::value_type* str, S expected) { @@ -43,6 +44,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif { // test appending to self diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer_size.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, const typename S::value_type* str, typename S::size_type n, S expected) { @@ -48,6 +49,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif { // test appending to self diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/push_back.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/push_back.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/push_back.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/push_back.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" struct VeryLarge { long long a; @@ -74,6 +75,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif { // https://llvm.org/PR31454 diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/size_char.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/size_char.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/size_char.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/size_char.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type n, typename S::value_type c, S expected) { @@ -44,6 +45,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; } diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, S str, S expected) { @@ -51,6 +52,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif #if TEST_STD_VER >= 11 diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_size_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_size_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_size_size.pass.cpp @@ -18,6 +18,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, S str, typename S::size_type pos, typename S::size_type n, S expected) { @@ -85,6 +86,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif { diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_view.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_view.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_view.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, SV sv, S expected) { @@ -53,6 +54,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; } diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/T_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/T_size_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/T_size_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/T_size_size.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, SV sv, typename S::size_type pos, typename S::size_type n, S expected) { @@ -85,6 +86,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif { diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/initializer_list.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/initializer_list.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/initializer_list.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/initializer_list.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test_string() { @@ -27,9 +28,8 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string(); -#if TEST_STD_VER >= 11 test_string, min_allocator > >(); -#endif + test_string, fancy_pointer_allocator > >(); return true; } diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "test_iterators.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, It first, It last, S expected) { @@ -120,6 +121,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif #ifndef TEST_HAS_NO_EXCEPTIONS diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, const typename S::value_type* str, S expected) { @@ -43,6 +44,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif { // test assignment to self diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer_size.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, const typename S::value_type* str, typename S::size_type n, S expected) { @@ -48,6 +49,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif { // test assign to self @@ -66,6 +68,7 @@ s_long.assign(s_long.data() + 2, 8); assert(s_long == "rem ipsu"); } + return true; } diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/rv_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/rv_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/rv_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/rv_string.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, S str, S expected) { @@ -52,6 +53,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/size_char.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/size_char.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/size_char.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/size_char.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type n, typename S::value_type c, S expected) { @@ -44,6 +45,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string.pass.cpp @@ -80,6 +80,7 @@ test_string(); // has POCCA --> true #if TEST_STD_VER >= 11 test_string(); + test_string(); #endif #if TEST_STD_VER > 14 { diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string_size_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string_size_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string_size_size.pass.cpp @@ -18,6 +18,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, S str, typename S::size_type pos, typename S::size_type n, S expected) { @@ -85,6 +86,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif { diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string_view.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string_view.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string_view.pass.cpp @@ -69,6 +69,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_copy/copy.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_copy/copy.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_copy/copy.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_copy/copy.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S str, typename S::value_type* s, typename S::size_type n, typename S::size_type pos) { @@ -108,6 +109,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; } diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/iter.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/iter.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/iter.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/iter.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, typename S::difference_type pos, S expected) { @@ -46,6 +47,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/iter_iter.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/iter_iter.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/iter_iter.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/iter_iter.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, typename S::difference_type pos, typename S::difference_type n, S expected) { @@ -89,6 +90,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; } diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/pop_back.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/pop_back.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/pop_back.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/pop_back.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, S expected) { @@ -35,6 +36,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/size_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/size_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/size_size.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type pos, typename S::size_type n, S expected) { @@ -180,6 +181,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_char.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_char.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_char.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_char.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S& s, typename S::const_iterator p, typename S::value_type c, S expected) { @@ -53,6 +54,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_initializer_list.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_initializer_list.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_initializer_list.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_initializer_list.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test_string() { @@ -29,6 +30,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string(); test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); return true; } diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "test_iterators.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, typename S::difference_type pos, It first, It last, S expected) { @@ -147,6 +148,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif #ifndef TEST_HAS_NO_EXCEPTIONS diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_size_char.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_size_char.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_size_char.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_size_char.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void @@ -98,6 +99,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_T_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_T_size_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_T_size_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_T_size_size.pass.cpp @@ -19,6 +19,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void @@ -1858,6 +1859,8 @@ #if TEST_STD_VER >= 11 test, min_allocator >, std::basic_string_view > >(); + test, fancy_pointer_allocator >, + std::basic_string_view > >(); #endif return 0; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_pointer.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_pointer.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_pointer.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type pos, const typename S::value_type* str, S expected) { @@ -128,6 +129,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif { // test inserting into self diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_pointer_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_pointer_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_pointer_size.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void @@ -387,11 +388,13 @@ test(); #if TEST_STD_VER >= 11 test, min_allocator > >(); + test, fancy_pointer_allocator > >(); #endif #if TEST_STD_VER > 17 static_assert(test()); static_assert(test, min_allocator > >()); + static_assert(test, fancy_pointer_allocator > >()); #endif return 0; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_size_char.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_size_char.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_size_char.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_size_char.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void @@ -129,6 +130,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_string.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type pos, S str, S expected) { @@ -128,6 +129,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif #if TEST_STD_VER >= 11 diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_string_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_string_size_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_string_size_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_string_size_size.pass.cpp @@ -19,6 +19,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void @@ -1816,6 +1817,7 @@ test(); #if TEST_STD_VER >= 11 test, min_allocator > >(); + test, fancy_pointer_allocator > >(); #endif return 0; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/string_view.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/string_view.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/string_view.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type pos, SV sv, S expected) { @@ -129,6 +130,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif { // test inserting into self diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/char.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/char.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/char.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/char.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, typename S::value_type str, S expected) { @@ -35,6 +36,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/initializer_list.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/initializer_list.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/initializer_list.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/initializer_list.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test_string() { @@ -28,6 +29,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string(); test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); return true; } diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/pointer.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/pointer.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/pointer.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, const typename S::value_type* str, S expected) { @@ -50,6 +51,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/string.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/string.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, S str, S expected) { @@ -51,6 +52,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); { // LWG 2946 std::string s; s += {"abc", 1}; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_initializer_list.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_initializer_list.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_initializer_list.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_initializer_list.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test_string() { @@ -28,6 +29,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string(); test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); return true; } diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp @@ -19,6 +19,7 @@ #include "test_macros.h" #include "min_allocator.h" #include "test_iterators.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type pos1, typename S::size_type n1, It f, It l, S expected) { @@ -1064,7 +1065,8 @@ test(); #if TEST_STD_VER >= 11 test, min_allocator > >(); + test, fancy_pointer_allocator > >(); #endif return 0; } \ No newline at end of file diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer.pass.cpp @@ -19,6 +19,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void @@ -299,6 +300,7 @@ test(); #if TEST_STD_VER >= 11 test, min_allocator > >(); + test, fancy_pointer_allocator > >(); #endif return 0; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer_size.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void @@ -1004,7 +1005,8 @@ test(); #if TEST_STD_VER >= 11 test, min_allocator > >(); + test, fancy_pointer_allocator > >(); #endif return 0; } \ No newline at end of file diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_size_char.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_size_char.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_size_char.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_size_char.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void @@ -285,7 +286,8 @@ test(); #if TEST_STD_VER >= 11 test, min_allocator > >(); + test, fancy_pointer_allocator > >(); #endif return 0; } \ No newline at end of file diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_string.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type pos1, typename S::size_type n1, S str, S expected) { @@ -292,6 +293,7 @@ test(); #if TEST_STD_VER >= 11 test, min_allocator > >(); + test, fancy_pointer_allocator > >(); #endif return 0; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_string_view.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_string_view.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_string_view.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type pos1, typename S::size_type n1, SV sv, S expected) { @@ -283,6 +284,7 @@ test(); #if TEST_STD_VER >= 11 test(); + test(); #endif return 0; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_T_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_T_size_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_T_size_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_T_size_size.pass.cpp @@ -21,6 +21,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void @@ -6277,6 +6278,7 @@ test(); #if TEST_STD_VER >= 11 test(); + test(); #endif return 0; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_pointer.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_pointer.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_pointer.pass.cpp @@ -18,6 +18,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void @@ -377,6 +378,7 @@ test(); #if TEST_STD_VER >= 11 test, min_allocator > >(); + test, fancy_pointer_allocator > >(); #endif return 0; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_pointer_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_pointer_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_pointer_size.pass.cpp @@ -18,6 +18,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void @@ -1341,6 +1342,7 @@ test(); #if TEST_STD_VER >= 11 test, min_allocator > >(); + test, fancy_pointer_allocator > >(); #endif return 0; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_size_char.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_size_char.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_size_char.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_size_char.pass.cpp @@ -18,6 +18,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void @@ -381,6 +382,7 @@ test(); #if TEST_STD_VER >= 11 test, min_allocator > >(); + test, fancy_pointer_allocator > >(); #endif return 0; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string.pass.cpp @@ -18,6 +18,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type pos1, typename S::size_type n1, S str, S expected) { @@ -385,6 +386,7 @@ test(); #if TEST_STD_VER >= 11 test, min_allocator > >(); + test, fancy_pointer_allocator > >(); #endif return 0; } diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string_size_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string_size_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string_size_size.pass.cpp @@ -20,6 +20,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void @@ -6097,6 +6098,7 @@ test(); #if TEST_STD_VER >= 11 test, min_allocator > >(); + test, fancy_pointer_allocator > >(); #endif return 0; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string_view.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string_view.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string_view.pass.cpp @@ -18,6 +18,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type pos1, typename S::size_type n1, SV sv, S expected) { @@ -376,6 +377,7 @@ test(); #if TEST_STD_VER >= 11 test(); + test(); #endif return 0; diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_swap/swap.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_swap/swap.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.modifiers/string_swap/swap.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_swap/swap.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template TEST_CONSTEXPR_CXX20 void test(S s1, S s2) { @@ -53,6 +54,7 @@ test_string(); #if TEST_STD_VER >= 11 test_string, min_allocator > >(); + test_string, fancy_pointer_allocator > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line.pass.cpp @@ -19,6 +19,7 @@ #include "min_allocator.h" #include "test_macros.h" +#include "test_allocator.h" template