diff --git a/libcxx/include/string b/libcxx/include/string --- a/libcxx/include/string +++ b/libcxx/include/string @@ -770,7 +770,7 @@ 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 +779,7 @@ size_type __words[__n_words]; }; +#ifdef _LIBCPP_CXX03_LANG struct __rep { union @@ -788,6 +789,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 <class CharT> using min_string = std::basic_string<CharT, std::char_traits<CharT>, min_allocator<CharT>>; +template <class CharT> +using fancy_string = std::basic_string<CharT, std::char_traits<CharT>, fancy_pointer_allocator<CharT>>; + template <class CharT> using test_string = std::basic_string<CharT, std::char_traits<CharT>, test_allocator<CharT>>; @@ -54,6 +57,7 @@ static_assert(alignof(std::string) == 8, ""); static_assert(alignof(min_string<char>) == 8, ""); +static_assert(alignof(fancy_string<char>) == 8, ""); static_assert(alignof(test_string<char>) == 8, ""); static_assert(alignof(small_string<char>) == 2, ""); @@ -61,11 +65,13 @@ # if __WCHAR_WIDTH__ == 32 static_assert(alignof(std::wstring) == 8, ""); static_assert(alignof(min_string<wchar_t>) == 8, ""); +static_assert(alignof(fancy_string<wchar_t>) == 8, ""); static_assert(alignof(test_string<wchar_t>) == 8, ""); static_assert(alignof(small_string<wchar_t>) == 4, ""); # elif __WCHAR_WIDTH__ == 16 static_assert(alignof(std::wstring) == 8, ""); static_assert(alignof(min_string<wchar_t>) == 8, ""); +static_assert(alignof(fancy_string<wchar_t>) == 8, ""); static_assert(alignof(test_string<wchar_t>) == 8, ""); static_assert(alignof(small_string<wchar_t>) == 2, ""); # else @@ -76,6 +82,7 @@ # ifndef TEST_HAS_NO_CHAR8_T static_assert(alignof(std::u8string) == 8, ""); static_assert(alignof(min_string<char8_t>) == 8, ""); +static_assert(alignof(fancy_string<char8_t>) == 8, ""); static_assert(alignof(test_string<char8_t>) == 8, ""); static_assert(alignof(small_string<char8_t>) == 2, ""); # endif @@ -85,6 +92,8 @@ static_assert(alignof(std::u32string) == 8, ""); static_assert(alignof(min_string<char16_t>) == 8, ""); static_assert(alignof(min_string<char32_t>) == 8, ""); +static_assert(alignof(fancy_string<char16_t>) == 8, ""); +static_assert(alignof(fancy_string<char32_t>) == 8, ""); static_assert(alignof(test_string<char16_t>) == 8, ""); static_assert(alignof(test_string<char32_t>) == 8, ""); static_assert(alignof(small_string<char16_t>) == 2, ""); @@ -95,6 +104,7 @@ static_assert(alignof(std::string) == 4, ""); static_assert(alignof(min_string<char>) == 4, ""); +static_assert(alignof(fancy_string<char>) == 4, ""); static_assert(alignof(test_string<char>) == 4, ""); static_assert(alignof(small_string<char>) == 2, ""); @@ -102,11 +112,13 @@ # if __WCHAR_WIDTH__ == 32 static_assert(alignof(std::wstring) == 4, ""); static_assert(alignof(min_string<wchar_t>) == 4, ""); +static_assert(alignof(fancy_string<wchar_t>) == 4, ""); static_assert(alignof(test_string<wchar_t>) == 4, ""); static_assert(alignof(small_string<wchar_t>) == 4, ""); # elif __WCHAR_WIDTH__ == 16 static_assert(alignof(std::wstring) == 4, ""); static_assert(alignof(min_string<wchar_t>) == 4, ""); +static_assert(alignof(fancy_string<wchar_t>) == 4, ""); static_assert(alignof(test_string<wchar_t>) == 4, ""); static_assert(alignof(small_string<wchar_t>) == 2, ""); # else @@ -117,6 +129,7 @@ # ifndef TEST_HAS_NO_CHAR8_T static_assert(alignof(std::u8string) == 4, ""); static_assert(alignof(min_string<char8_t>) == 4, ""); +static_assert(alignof(fancy_string<char8_t>) == 4, ""); static_assert(alignof(test_string<char8_t>) == 4, ""); static_assert(alignof(small_string<char8_t>) == 2, ""); # endif @@ -126,6 +139,8 @@ static_assert(alignof(std::u32string) == 4, ""); static_assert(alignof(min_string<char16_t>) == 4, ""); static_assert(alignof(min_string<char32_t>) == 4, ""); +static_assert(alignof(fancy_string<char16_t>) == 4, ""); +static_assert(alignof(fancy_string<char32_t>) == 4, ""); static_assert(alignof(test_string<char16_t>) == 4, ""); static_assert(alignof(test_string<char32_t>) == 4, ""); static_assert(alignof(small_string<char32_t>) == 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 <class CharT> using min_string = std::basic_string<CharT, std::char_traits<CharT>, min_allocator<CharT> >; +template <class CharT> +using fancy_string = std::basic_string<CharT, std::char_traits<CharT>, fancy_pointer_allocator<CharT> >; + template <class CharT> using test_string = std::basic_string<CharT, std::char_traits<CharT>, test_allocator<CharT> >; @@ -52,6 +55,9 @@ static_assert(sizeof(std::string) == 24, ""); static_assert(sizeof(min_string<char>) == 24, ""); +# if TEST_STD_VER >= 11 +static_assert(sizeof(fancy_string<char>) == 24, ""); +# endif static_assert(sizeof(test_string<char>) == 32, ""); static_assert(sizeof(small_string<char>) == 6, ""); @@ -59,11 +65,17 @@ # if __WCHAR_WIDTH__ == 32 static_assert(sizeof(std::wstring) == 24, ""); static_assert(sizeof(min_string<wchar_t>) == 24, ""); +# if TEST_STD_VER >= 11 +static_assert(sizeof(fancy_string<wchar_t>) == 24, ""); +# endif static_assert(sizeof(test_string<wchar_t>) == 32, ""); static_assert(sizeof(small_string<wchar_t>) == 12, ""); # elif __WCHAR_WIDTH__ == 16 static_assert(sizeof(std::wstring) == 24, ""); static_assert(sizeof(min_string<wchar_t>) == 24, ""); +# if TEST_STD_VER >= 11 +static_assert(sizeof(fancy_string<wchar_t>) == 24, ""); +# endif static_assert(sizeof(test_string<wchar_t>) == 32, ""); static_assert(sizeof(small_string<wchar_t>) == 6, ""); # else @@ -74,6 +86,9 @@ # ifndef TEST_HAS_NO_CHAR8_T static_assert(sizeof(std::u8string) == 24, ""); static_assert(sizeof(min_string<char8_t>) == 24, ""); +# if TEST_STD_VER >= 11 +static_assert(sizeof(fancy_string<char8_t>) == 24, ""); +# endif static_assert(sizeof(test_string<char8_t>) == 32, ""); static_assert(sizeof(small_string<char8_t>) == 6, ""); # endif @@ -83,6 +98,10 @@ static_assert(sizeof(std::u32string) == 24, ""); static_assert(sizeof(min_string<char16_t>) == 24, ""); static_assert(sizeof(min_string<char32_t>) == 24, ""); +# if TEST_STD_VER >= 11 +static_assert(sizeof(fancy_string<char16_t>) == 24, ""); +static_assert(sizeof(fancy_string<char32_t>) == 24, ""); +# endif static_assert(sizeof(test_string<char16_t>) == 32, ""); static_assert(sizeof(test_string<char32_t>) == 32, ""); static_assert(sizeof(small_string<char16_t>) == 6, ""); @@ -93,6 +112,9 @@ static_assert(sizeof(std::string) == 12, ""); static_assert(sizeof(min_string<char>) == 12, ""); +# if TEST_STD_VER >= 11 +static_assert(sizeof(fancy_string<char>) == 12, ""); +# endif static_assert(sizeof(test_string<char>) == 24, ""); static_assert(sizeof(small_string<char>) == 6, ""); @@ -100,11 +122,17 @@ # if __WCHAR_WIDTH__ == 32 static_assert(sizeof(std::wstring) == 12, ""); static_assert(sizeof(min_string<wchar_t>) == 12, ""); +# if TEST_STD_VER >= 11 +static_assert(sizeof(fancy_string<wchar_t>) == 12, ""); +# endif static_assert(sizeof(test_string<wchar_t>) == 24, ""); static_assert(sizeof(small_string<wchar_t>) == 12, ""); # elif __WCHAR_WIDTH__ == 16 static_assert(sizeof(std::wstring) == 12, ""); static_assert(sizeof(min_string<wchar_t>) == 12, ""); +# if TEST_STD_VER >= 11 +static_assert(sizeof(fancy_string<wchar_t>) == 12, ""); +# endif static_assert(sizeof(test_string<wchar_t>) == 24, ""); static_assert(sizeof(small_string<wchar_t>) == 6, ""); # else @@ -115,6 +143,9 @@ # ifndef TEST_HAS_NO_CHAR8_T static_assert(sizeof(std::u8string) == 12, ""); static_assert(sizeof(min_string<char8_t>) == 12, ""); +# if TEST_STD_VER >= 11 +static_assert(sizeof(fancy_string<char8_t>) == 12, ""); +# endif static_assert(sizeof(test_string<char8_t>) == 24, ""); static_assert(sizeof(small_string<char>) == 6, ""); # endif @@ -124,6 +155,10 @@ static_assert(sizeof(std::u32string) == 12, ""); static_assert(sizeof(min_string<char16_t>) == 12, ""); static_assert(sizeof(min_string<char32_t>) == 12, ""); +# if TEST_STD_VER >= 11 +static_assert(sizeof(fancy_string<char16_t>) == 12, ""); +static_assert(sizeof(fancy_string<char32_t>) == 12, ""); +# endif static_assert(sizeof(test_string<char16_t>) == 24, ""); static_assert(sizeof(test_string<char32_t>) == 24, ""); static_assert(sizeof(small_string<char16_t>) == 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 <class S> void test() { @@ -29,6 +30,7 @@ int main(int, char**) { test<std::string>(); test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <class S> void test() { @@ -29,6 +30,7 @@ int main(int, char**) { test<std::string>(); test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <class S> void test() { @@ -29,6 +30,7 @@ int main(int, char**) { test<std::string>(); test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <class S> void test() { @@ -31,6 +32,7 @@ int main(int, char**) { test<std::string>(); test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <class S> void test() { @@ -30,6 +31,7 @@ int main(int, char**) { test<std::string>(); test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <class S> void test() { @@ -31,6 +32,7 @@ int main(int, char**) { test<std::string>(); test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <class S> TEST_CONSTEXPR_CXX20 bool test() { @@ -75,6 +76,7 @@ #if TEST_STD_VER >= 11 test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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<std::basic_string<char, std::char_traits<char>, test_allocator<char> > >(); #if TEST_STD_VER >= 11 - test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>(); + test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif #if TEST_STD_VER > 17 - static_assert(test<std::basic_string<char, std::char_traits<char>, test_allocator<char>>>()); - static_assert(test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>()); + static_assert(test<std::basic_string<char, std::char_traits<char>, test_allocator<char> > >()); + static_assert(test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >()); + static_assert(test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >()); #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 <class C> void test() { @@ -32,6 +33,7 @@ int main(int, char**) { test<std::string>(); test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <class S> void test() { @@ -28,6 +29,7 @@ int main(int, char**) { test<std::string>(); test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <class C> void test() { @@ -31,6 +32,7 @@ int main(int, char**) { test<std::string>(); test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <class C> void test() { @@ -28,6 +29,7 @@ int main(int, char**) { test<std::string>(); test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <class C> void test() { @@ -31,6 +32,7 @@ int main(int, char**) { test<std::string>(); test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <class C> void test() { @@ -31,6 +32,7 @@ int main(int, char**) { test<std::string>(); test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <class S> void test() { @@ -28,6 +29,7 @@ int main(int, char**) { test<std::string>(); test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <class S> void test() { @@ -30,6 +31,7 @@ int main(int, char**) { test<std::string>(); test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <string> #include "check_assertion.h" +#include "test_allocator.h" template <class S> void test() { @@ -27,6 +28,7 @@ int main(int, char**) { test<std::string>(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <class S> void test() { @@ -30,6 +31,7 @@ int main(int, char**) { test<std::string>(); test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <class S> void test() { @@ -56,6 +57,7 @@ int main(int, char**) { test<std::string>(); test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <string> #include "check_assertion.h" +#include "test_allocator.h" template <class S> void test() { @@ -34,6 +35,7 @@ int main(int, char**) { test<std::string>(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <string> #include "check_assertion.h" +#include "test_allocator.h" template <class S> void test() { @@ -30,6 +31,7 @@ int main(int, char**) { test<std::string>(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <string> #include "check_assertion.h" +#include "test_allocator.h" template <class S> void test() { @@ -27,6 +28,7 @@ int main(int, char**) { test<std::string>(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <cassert> #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<std::string>(); +#if TEST_STD_VER >= 11 + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); +#endif + #if TEST_STD_VER > 17 static_assert(test<std::string>()); + static_assert(test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >()); #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<std::u16string>(); test_hash_enabled_for_type<std::u32string>(); test_hash_enabled_for_type<std::basic_string<char, std::char_traits<char>, test_allocator<char>>>(); + test_hash_enabled_for_type<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char>>>(); test_hash_disabled_for_type<std::basic_string<MyChar, std::char_traits<MyChar>, std::allocator<MyChar>>>(); test_hash_disabled_for_type<std::basic_string<char, constexpr_char_traits<char>, std::allocator<char>>>(); } 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 <cassert> #include "min_allocator.h" +#include "test_allocator.h" #include "make_string.h" #include "test_macros.h" @@ -61,6 +62,7 @@ test_string<std::basic_string<T> >(); #if TEST_STD_VER >= 11 test_string<std::basic_string<T, std::char_traits<T>, min_allocator<T> > >(); + test_string<std::basic_string<T, std::char_traits<T>, fancy_pointer_allocator<T> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(S s) { @@ -40,6 +41,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(S s) { @@ -40,6 +41,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test_string() { @@ -38,6 +39,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(S s) { @@ -40,6 +41,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(const S& s) { @@ -33,6 +34,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(const S& s) { @@ -32,6 +33,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test1(const S& s) { @@ -68,6 +69,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; @@ -84,6 +86,7 @@ TEST_CONSTEXPR_CXX20 bool test_constexpr() { test_string_constexpr<std::string>(); + test_string_constexpr<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <class S> TEST_CONSTEXPR_CXX20 void test(const S& s) { @@ -49,6 +50,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> void test(typename S::size_type min_cap, typename S::size_type erased_index) { @@ -46,6 +47,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void @@ -77,6 +78,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> constexpr void test_appending(size_t k, size_t N, size_t new_capacity) { @@ -86,25 +87,35 @@ int main(int, char**) { test_string<char, std::allocator>(); + test_string<char, fancy_pointer_allocator>(); test_string<char8_t, std::allocator>(); + test_string<char8_t, fancy_pointer_allocator>(); test_string<char16_t, std::allocator>(); + test_string<char16_t, fancy_pointer_allocator>(); test_string<char32_t, std::allocator>(); + test_string<char32_t, fancy_pointer_allocator>(); static_assert(test_string<char, std::allocator>()); + static_assert(test_string<char, fancy_pointer_allocator>()); static_assert(test_string<char8_t, std::allocator>()); + static_assert(test_string<char8_t, fancy_pointer_allocator>()); static_assert(test_string<char16_t, std::allocator>()); + static_assert(test_string<char16_t, fancy_pointer_allocator>()); static_assert(test_string<char32_t, std::allocator>()); + static_assert(test_string<char32_t, fancy_pointer_allocator>()); #ifndef TEST_HAS_NO_WIDE_CHARACTERS test_string<wchar_t, std::allocator>(); + test_string<wchar_t, fancy_pointer_allocator>(); static_assert(test_string<wchar_t, std::allocator>()); + static_assert(test_string<wchar_t, fancy_pointer_allocator>()); #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 <class S> 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<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> 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<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(S s) { @@ -45,6 +46,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(const S& s, typename S::size_type c) { @@ -32,6 +33,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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<char, test_allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #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 <class S> TEST_CONSTEXPR_CXX20 void test() { @@ -89,6 +90,7 @@ test<std::basic_string<char, std::char_traits<char>, test_allocator<char> > >(); #if TEST_STD_VER >= 11 test2<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test2<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); test2<std::basic_string<char, std::char_traits<char>, explicit_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(S s1, typename S::value_type s2) { @@ -36,8 +37,10 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string<std::string>(); + #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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<char, test_allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #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<char, test_allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); # 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 <class S> TEST_CONSTEXPR_CXX20 void test(S s1, const S& s2) { @@ -45,7 +46,8 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string<std::string>(); #if TEST_STD_VER >= 11 - test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>(); + test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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<char, std::char_traits<char>, test_allocator<char> > >::value, ""); +LIBCPP_STATIC_ASSERT(std::is_nothrow_default_constructible< + std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >::value, + ""); LIBCPP_STATIC_ASSERT(!std::is_nothrow_default_constructible< std::basic_string<char, std::char_traits<char>, limited_allocator<char, 10> > >::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<std::string>::value, ""); static_assert( std::is_nothrow_destructible< std::basic_string<char, std::char_traits<char>, test_allocator<char> > >::value, ""); +static_assert(std::is_nothrow_destructible< + std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >::value, + ""); LIBCPP_STATIC_ASSERT( !std::is_nothrow_destructible< std::basic_string<char, std::char_traits<char>, throwing_alloc<char> > >::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<std::allocator>(); test_string<min_allocator>(); + test_string<fancy_pointer_allocator>(); 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 <class S> TEST_CONSTEXPR_CXX20 void test_case() { @@ -28,6 +29,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_case<std::string>(); test_case<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_case<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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<char> >(test_allocator<char>(2)); #if TEST_STD_VER >= 11 test<min_allocator<char> >(min_allocator<char>()); + test<fancy_pointer_allocator<char> >(fancy_pointer_allocator<char>()); #endif { static_assert((!std::is_constructible<std::string, std::string, std::string>::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<char>{}}; test_string<char, std::allocator>(s, std::move(s1)); } + { + const char* s = "12345678901234"; + std::basic_string s1{s, s + 10, fancy_pointer_allocator<char>{}}; + test_string<char, fancy_pointer_allocator>(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<char16_t>{}}; test_string<char16_t, min_allocator>(s, std::move(s1)); } + { + const char16_t* s = u"12345678901234"; + std::basic_string s1{s, s + 10, fancy_pointer_allocator<char16_t>{}}; + test_string<char16_t, fancy_pointer_allocator>(s, std::move(s1)); + } #endif { const char32_t* s = U"12345678901234"; std::basic_string s1{s, s + 10, explicit_allocator<char32_t>{}}; test_string<char32_t, explicit_allocator>(s, std::move(s1)); } + { + const char32_t* s = U"12345678901234"; + std::basic_string s1{s, s + 10, fancy_pointer_allocator<char32_t>{}}; + test_string<char32_t, fancy_pointer_allocator>(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<char, std::allocator>(); test_string<char, test_allocator>(); + test_string<char, fancy_pointer_allocator>(); 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<char, test_allocator>(); test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); 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<char, std::char_traits<char>, test_allocator<char> > C; static_assert(!std::is_nothrow_move_assignable<C>::value, ""); } + { + typedef std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > C; + static_assert(std::is_nothrow_move_assignable<C>::value, ""); + } { typedef std::basic_string<char, std::char_traits<char>, some_alloc<char> > 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<std::string>(); -#if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); -#endif + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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<char, std::char_traits<char>, test_allocator<char> > C; static_assert(std::is_nothrow_move_constructible<C>::value, ""); } + { + typedef std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > C; + static_assert(std::is_nothrow_move_constructible<C>::value, ""); + } { typedef std::basic_string<char, std::char_traits<char>, limited_allocator<char, 10> > 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<char> >(test_allocator<char>(2)); #if TEST_STD_VER >= 11 test<min_allocator<char> >(min_allocator<char>()); + test<fancy_pointer_allocator<char> >(fancy_pointer_allocator<char>()); #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 <class S> TEST_CONSTEXPR_CXX20 void test(S s1, const typename S::value_type* s2) { @@ -48,6 +49,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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<char> >(test_allocator<char>(2)); #if TEST_STD_VER >= 11 test<min_allocator<char> >(min_allocator<char>()); + test<fancy_pointer_allocator<char> >(fancy_pointer_allocator<char>()); #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<test_allocator<char> >(); #if TEST_STD_VER >= 11 test_string<min_allocator<char> >(); + test_string<fancy_pointer_allocator<char> >(); #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<char> >(test_allocator<char>(2)); #if TEST_STD_VER >= 11 test_string<min_allocator<char> >(min_allocator<char>()); + test_string<fancy_pointer_allocator<char> >(fancy_pointer_allocator<char>()); #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 <class S, class SV> TEST_CONSTEXPR_CXX20 void test(S s1, SV sv) { @@ -48,6 +49,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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<char>{}}; test<char, std::allocator>(std::move(sv), std::move(s1)); } + { + std::string_view sv = "12345678901234"; + std::basic_string s1{sv, fancy_pointer_allocator<char>{}}; + test<char, fancy_pointer_allocator>(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<wchar_t>{}}; test<wchar_t, test_allocator>(std::move(sv), std::move(s1)); } + { + std::wstring_view sv = L"12345678901234"; + std::basic_string s1{sv, fancy_pointer_allocator<wchar_t>{}}; + test<wchar_t, fancy_pointer_allocator>(std::move(sv), std::move(s1)); + } #endif #ifndef TEST_HAS_NO_CHAR8_T { @@ -79,6 +89,11 @@ std::basic_string s1{sv, min_allocator<char8_t>{}}; test<char8_t, min_allocator>(std::move(sv), std::move(s1)); } + { + std::u8string_view sv = u8"12345678901234"; + std::basic_string s1{sv, fancy_pointer_allocator<char8_t>{}}; + test<char8_t, fancy_pointer_allocator>(std::move(sv), std::move(s1)); + } #endif { std::u16string_view sv = u"12345678901234"; @@ -90,6 +105,11 @@ std::basic_string s1{sv, explicit_allocator<char32_t>{}}; test<char32_t, explicit_allocator>(std::move(sv), std::move(s1)); } + { + std::u32string_view sv = U"12345678901234"; + std::basic_string s1{sv, fancy_pointer_allocator<char32_t>{}}; + test<char32_t, fancy_pointer_allocator>(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<char, std::allocator>(std::move(sv), std::move(s1)); } - { std::string_view sv = "12345678901234"; std::basic_string s1{sv, 0, 4, std::allocator<char>{}}; test<char, std::allocator>(std::move(sv), std::move(s1)); } + { + std::string_view sv = "12345678901234"; + std::basic_string s1{sv, 0, 4, fancy_pointer_allocator<char>{}}; + test<char, fancy_pointer_allocator>(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<wchar_t>{}}; test<wchar_t, test_allocator>(std::move(sv), std::move(s1)); } + { + std::wstring_view sv = L"12345678901234"; + std::basic_string s1{sv, 0, 4, fancy_pointer_allocator<wchar_t>{}}; + test<wchar_t, fancy_pointer_allocator>(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<char8_t>{}}; test<char8_t, min_allocator>(std::move(sv), std::move(s1)); } + { + std::u8string_view sv = u8"12345678901234"; + std::basic_string s1{sv, 0, 4, fancy_pointer_allocator<char8_t>{}}; + test<char8_t, fancy_pointer_allocator>(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<char32_t>{}}; test<char32_t, explicit_allocator>(std::move(sv), std::move(s1)); } + { + std::u32string_view sv = U"12345678901234"; + std::basic_string s1{sv, 0, 4, fancy_pointer_allocator<char32_t>{}}; + test<char32_t, fancy_pointer_allocator>(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<char, std::allocator>(); test_string<char, test_allocator>(); #if TEST_STD_VER >= 11 - { test_string<char, min_allocator>(); } + { + test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); + } #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::basic_string<CharT, CharTraits, std::allocator<CharT>>>(std::allocator<CharT>{}); test_string<std::basic_string<CharT, CharTraits, min_allocator<CharT>>>(min_allocator<CharT>{}); test_string<std::basic_string<CharT, CharTraits, test_allocator<CharT>>>(test_allocator<CharT>{42}); + test_string<std::basic_string<CharT, CharTraits, fancy_pointer_allocator<CharT>>>(fancy_pointer_allocator<CharT>{}); } template <class CharT> 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 <cassert> #include "test_macros.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test_string() { @@ -33,6 +34,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string<std::string>(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <cassert> #include "test_macros.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test_string() { @@ -63,6 +64,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string<std::string>(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <cassert> #include "test_macros.h" +#include "test_allocator.h" template <class CharT, template <class> class Alloc> TEST_CONSTEXPR_CXX20 void test_string() { @@ -86,6 +87,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string<char, std::allocator>(); + test_string<char, fancy_pointer_allocator>(); 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 <cassert> #include "test_macros.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test_string() { @@ -31,6 +32,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string<std::string>(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <cassert> #include "test_macros.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test_string() { @@ -60,6 +61,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string<std::string>(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <cassert> #include "test_macros.h" +#include "test_allocator.h" template <class CharT, template <class> class Alloc> TEST_CONSTEXPR_CXX20 void test_string() { @@ -70,6 +71,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string<char, std::allocator>(); + test_string<char, fancy_pointer_allocator>(); 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 <class S> TEST_CONSTEXPR_CXX20 void test(S s) { @@ -38,6 +39,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(const S& s) { @@ -35,6 +36,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(const S& s) { @@ -32,6 +33,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(const S& s) { @@ -35,6 +36,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(const S& s) { @@ -32,6 +33,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(S s) { @@ -41,6 +42,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(S s) { @@ -38,6 +39,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(S s) { @@ -41,6 +42,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <string> #include "test_macros.h" +#include "test_allocator.h" struct Incomplete; template <class T> @@ -39,6 +40,9 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string<std::string>(); +#if TEST_STD_VER >= 11 + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); +#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 <class S, class SV> 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<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test_string() { @@ -27,9 +28,8 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string<std::string>(); -#if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); -#endif + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <class S, class It> TEST_CONSTEXPR_CXX20 void test(S s, It first, It last, S expected) { @@ -144,6 +145,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(S s, const typename S::value_type* str, S expected) { @@ -43,6 +44,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> 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<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> 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<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(S s, S str, S expected) { @@ -51,6 +52,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> 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<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S, class SV> TEST_CONSTEXPR_CXX20 void test(S s, SV sv, S expected) { @@ -53,6 +54,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S, class SV> 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<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test_string() { @@ -27,9 +28,8 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string<std::string>(); -#if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); -#endif + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <class S, class It> TEST_CONSTEXPR_CXX20 void test(S s, It first, It last, S expected) { @@ -120,6 +121,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(S s, const typename S::value_type* str, S expected) { @@ -43,6 +44,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> 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<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(S s, S str, S expected) { @@ -52,6 +53,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> 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<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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<char, other_allocator>(); // has POCCA --> true #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #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 <class S> 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<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> 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<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(S s, typename S::difference_type pos, S expected) { @@ -46,6 +47,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> 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<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(S s, S expected) { @@ -35,6 +36,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> 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<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> 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<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test_string() { @@ -29,6 +30,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string<std::string>(); test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <class S, class It> TEST_CONSTEXPR_CXX20 void test(S s, typename S::difference_type pos, It first, It last, S expected) { @@ -147,6 +148,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void @@ -98,6 +99,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S, class SV> TEST_CONSTEXPR_CXX20 void @@ -1858,6 +1859,8 @@ #if TEST_STD_VER >= 11 test<std::basic_string<char, std::char_traits<char>, min_allocator<char> >, std::basic_string_view<char, std::char_traits<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> >, + std::basic_string_view<char, std::char_traits<char> > >(); #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 <class S> 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<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void @@ -387,11 +388,13 @@ test<std::string>(); #if TEST_STD_VER >= 11 test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif #if TEST_STD_VER > 17 static_assert(test<std::string>()); static_assert(test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >()); + static_assert(test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >()); #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 <class S> TEST_CONSTEXPR_CXX20 void @@ -129,6 +130,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type pos, S str, S expected) { @@ -128,6 +129,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void @@ -1816,6 +1817,7 @@ test<std::string>(); #if TEST_STD_VER >= 11 test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S, class SV> TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type pos, SV sv, S expected) { @@ -129,6 +130,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(S s, typename S::value_type str, S expected) { @@ -35,6 +36,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test_string() { @@ -28,6 +29,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string<std::string>(); test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <class S> TEST_CONSTEXPR_CXX20 void test(S s, const typename S::value_type* str, S expected) { @@ -50,6 +51,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(S s, S str, S expected) { @@ -51,6 +52,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); { // 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 <class S> TEST_CONSTEXPR_CXX20 void test_string() { @@ -28,6 +29,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string<std::string>(); test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); 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 <class S, class It> 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<std::string>(); #if TEST_STD_VER >= 11 test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void @@ -299,6 +300,7 @@ test<std::string>(); #if TEST_STD_VER >= 11 test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void @@ -1004,7 +1005,8 @@ test<std::string>(); #if TEST_STD_VER >= 11 test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void @@ -285,7 +286,8 @@ test<std::string>(); #if TEST_STD_VER >= 11 test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> 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<std::string>(); #if TEST_STD_VER >= 11 test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S, class SV> 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<char, std::allocator>(); #if TEST_STD_VER >= 11 test<char, min_allocator>(); + test<char, fancy_pointer_allocator>(); #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 <class S, class SV> TEST_CONSTEXPR_CXX20 void @@ -6277,6 +6278,7 @@ test<char, std::allocator>(); #if TEST_STD_VER >= 11 test<char, min_allocator>(); + test<char, fancy_pointer_allocator>(); #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 <class S> TEST_CONSTEXPR_CXX20 void @@ -377,6 +378,7 @@ test<std::string>(); #if TEST_STD_VER >= 11 test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void @@ -1341,6 +1342,7 @@ test<std::string>(); #if TEST_STD_VER >= 11 test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void @@ -381,6 +382,7 @@ test<std::string>(); #if TEST_STD_VER >= 11 test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> 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<std::string>(); #if TEST_STD_VER >= 11 test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S> TEST_CONSTEXPR_CXX20 void @@ -6097,6 +6098,7 @@ test<std::string>(); #if TEST_STD_VER >= 11 test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <class S, class SV> 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<char, std::allocator>(); #if TEST_STD_VER >= 11 test<char, min_allocator>(); + test<char, fancy_pointer_allocator>(); #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 <class S> TEST_CONSTEXPR_CXX20 void test(S s1, S s2) { @@ -53,6 +54,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #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 <template <class> class Alloc> void test_string() { @@ -58,6 +59,7 @@ test_string<std::allocator>(); #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.nonmembers/string.io/get_line_delim.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_delim.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_delim.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_delim.pass.cpp @@ -19,6 +19,7 @@ #include "min_allocator.h" #include "test_macros.h" +#include "test_allocator.h" template <template <class> class Alloc> void test_string() { @@ -64,6 +65,7 @@ test_string<std::allocator>(); #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.nonmembers/string.io/get_line_delim_rv.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_delim_rv.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_delim_rv.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_delim_rv.pass.cpp @@ -19,6 +19,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <template <class> class Alloc> void test() { @@ -42,6 +43,7 @@ test<std::allocator>(); #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.nonmembers/string.io/get_line_rv.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_rv.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_rv.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_rv.pass.cpp @@ -19,6 +19,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <template <class> class Alloc> void test() { @@ -41,6 +42,9 @@ int main(int, char**) { test<std::allocator>(); test<min_allocator>(); +#if TEST_STD_VER >= 11 + test<fancy_pointer_allocator>(); +#endif // TEST_STD_VER >= 11 return 0; } diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/stream_extract.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/stream_extract.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/stream_extract.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/stream_extract.pass.cpp @@ -19,6 +19,7 @@ #include "min_allocator.h" #include "test_macros.h" +#include "test_allocator.h" template <template <class> class Alloc> void test_string() { @@ -76,6 +77,7 @@ test_string<std::allocator>(); #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.nonmembers/string.io/stream_insert.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/stream_insert.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/stream_insert.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/stream_insert.pass.cpp @@ -19,6 +19,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <template <class> class Alloc> void test() { @@ -65,6 +66,7 @@ #if TEST_STD_VER >= 11 test<min_allocator>(); + test<fancy_pointer_allocator>(); #endif // TEST_STD_VER >= 11 return 0; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string.special/swap.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string.special/swap.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string.special/swap.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string.special/swap.pass.cpp @@ -19,6 +19,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(S s1, S s2) { @@ -55,6 +56,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/pointer_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/pointer_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/pointer_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/pointer_string.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const typename S::value_type* lhs, const S& rhs, bool x) { @@ -46,6 +47,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_pointer.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_pointer.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_pointer.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const S& lhs, const typename S::value_type* rhs, bool x) { @@ -46,6 +47,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_string.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const S& lhs, const S& rhs, bool x) { @@ -47,6 +48,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_string_view.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_string_view.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_string_view.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S, class SV> TEST_CONSTEXPR_CXX20 void test(const S& lhs, SV rhs, bool x) { @@ -46,6 +47,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_view_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_view_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_view_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_view_string.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S, class SV> TEST_CONSTEXPR_CXX20 void test(SV lhs, const S& rhs, bool x) { @@ -46,6 +47,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/char_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/char_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/char_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/char_string.pass.cpp @@ -22,6 +22,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test0(typename S::value_type lhs, const S& rhs, const S& x) { @@ -53,6 +54,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/pointer_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/pointer_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/pointer_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/pointer_string.pass.cpp @@ -22,6 +22,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test0(const typename S::value_type* lhs, const S& rhs, const S& x) { @@ -78,6 +79,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_char.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_char.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_char.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_char.pass.cpp @@ -22,6 +22,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test0(const S& lhs, typename S::value_type rhs, const S& x) { @@ -55,6 +56,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_pointer.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_pointer.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_pointer.pass.cpp @@ -22,6 +22,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test0(const S& lhs, const typename S::value_type* rhs, const S& x) { @@ -77,6 +78,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_string.pass.cpp @@ -34,6 +34,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test0(const S& lhs, const S& rhs, const S& x) { @@ -133,6 +134,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/pointer_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/pointer_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/pointer_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/pointer_string.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const typename S::value_type* lhs, const S& rhs, bool x) { @@ -46,6 +47,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_pointer.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_pointer.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_pointer.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const S& lhs, const typename S::value_type* rhs, bool x) { @@ -46,6 +47,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_string.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const S& lhs, const S& rhs, bool x) { @@ -47,6 +48,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_string_view.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_string_view.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_string_view.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S, class SV> TEST_CONSTEXPR_CXX20 void test(const S& lhs, SV rhs, bool x) { @@ -47,6 +48,7 @@ test_string<char, std::allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_view_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_view_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_view_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_view_string.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S, class SV> TEST_CONSTEXPR_CXX20 void test(SV lhs, const S& rhs, bool x) { @@ -48,6 +49,7 @@ test_string<char, std::allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #endif return true; } diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/pointer_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/pointer_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/pointer_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/pointer_string.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const typename S::value_type* lhs, const S& rhs, bool x) { @@ -46,6 +47,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_pointer.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_pointer.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_pointer.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const S& lhs, const typename S::value_type* rhs, bool x) { @@ -46,6 +47,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_string.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const S& lhs, const S& rhs, bool x) { @@ -47,6 +48,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_string_view.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_string_view.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_string_view.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S, class SV> TEST_CONSTEXPR_CXX20 void test(const S& lhs, SV rhs, bool x) { @@ -47,6 +48,7 @@ test_string<char, std::allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_view_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_view_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_view_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_view_string.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S, class SV> TEST_CONSTEXPR_CXX20 void test(SV lhs, const S& rhs, bool x) { @@ -47,6 +48,7 @@ test_string<char, std::allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/pointer_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/pointer_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/pointer_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/pointer_string.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const typename S::value_type* lhs, const S& rhs, bool x) { @@ -46,6 +47,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_pointer.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_pointer.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_pointer.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const S& lhs, const typename S::value_type* rhs, bool x) { @@ -46,6 +47,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_string.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const S& lhs, const S& rhs, bool x) { @@ -47,6 +48,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_string_view.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_string_view.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_string_view.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S, class SV> TEST_CONSTEXPR_CXX20 void test(const S& lhs, SV rhs, bool x) { @@ -47,6 +48,7 @@ test_string<char, std::allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_view_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_view_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_view_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_view_string.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S, class SV> TEST_CONSTEXPR_CXX20 void test(SV lhs, const S& rhs, bool x) { @@ -47,6 +48,7 @@ test_string<char, std::allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/pointer_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/pointer_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/pointer_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/pointer_string.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const typename S::value_type* lhs, const S& rhs, bool x) { @@ -46,6 +47,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_pointer.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_pointer.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_pointer.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const S& lhs, const typename S::value_type* rhs, bool x) { @@ -46,6 +47,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_string.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const S& lhs, const S& rhs, bool x) { @@ -47,6 +48,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_string_view.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_string_view.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_string_view.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S, class SV> TEST_CONSTEXPR_CXX20 void test(const S& lhs, SV rhs, bool x) { @@ -47,6 +48,7 @@ test_string<char, std::allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_view_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_view_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_view_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_view_string.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S, class SV> TEST_CONSTEXPR_CXX20 void test(SV lhs, const S& rhs, bool x) { @@ -47,6 +48,7 @@ test_string<char, std::allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/pointer_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/pointer_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/pointer_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/pointer_string.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const typename S::value_type* lhs, const S& rhs, bool x) { @@ -46,6 +47,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_pointer.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_pointer.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_pointer.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const S& lhs, const typename S::value_type* rhs, bool x) { @@ -46,6 +47,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_string.pass.cpp @@ -17,6 +17,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const S& lhs, const S& rhs, bool x) { @@ -47,6 +48,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_string_view.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_string_view.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_string_view.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S, class SV> TEST_CONSTEXPR_CXX20 void test(const S& lhs, SV rhs, bool x) { @@ -47,6 +48,7 @@ test_string<char, std::allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_view_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_view_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_view_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_view_string.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S, class SV> TEST_CONSTEXPR_CXX20 void test(SV lhs, const S& rhs, bool x) { @@ -47,6 +48,7 @@ test_string<char, std::allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string.accessors/c_str.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string.accessors/c_str.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string.accessors/c_str.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string.accessors/c_str.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const S& s) { @@ -39,6 +40,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string.accessors/data.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string.accessors/data.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string.accessors/data.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string.accessors/data.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test_const(const S& s) { @@ -63,6 +64,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string.accessors/get_allocator.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string.accessors/get_allocator.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string.accessors/get_allocator.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string.accessors/get_allocator.pass.cpp @@ -47,6 +47,7 @@ test_string<char, test_allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_compare/pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_compare/pointer.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_compare/pointer.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_compare/pointer.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" TEST_CONSTEXPR_CXX20 int sign(int x) { if (x == 0) @@ -54,6 +55,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_T_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_T_size_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_T_size_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_T_size_size.pass.cpp @@ -19,6 +19,7 @@ #include <cassert> #include "min_allocator.h" +#include "test_allocator.h" #include "test_macros.h" @@ -6044,6 +6045,7 @@ test<char, std::allocator>(); #if TEST_STD_VER >= 11 test<char, min_allocator>(); + test<char, fancy_pointer_allocator>(); #endif return 0; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_pointer.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_pointer.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_pointer.pass.cpp @@ -15,6 +15,7 @@ #include <cassert> #include "min_allocator.h" +#include "test_allocator.h" #include "test_macros.h" @@ -362,6 +363,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_pointer_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_pointer_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_pointer_size.pass.cpp @@ -15,6 +15,7 @@ #include <cassert> #include "min_allocator.h" +#include "test_allocator.h" #include "test_macros.h" @@ -1339,6 +1340,7 @@ test<std::string>(); #if TEST_STD_VER >= 11 test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return 0; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string.pass.cpp @@ -16,6 +16,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" TEST_CONSTEXPR_CXX20 int sign(int x) { if (x == 0) @@ -369,6 +370,7 @@ test<std::string>(); #if TEST_STD_VER >= 11 test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); { // LWG 2946 std::string s = " !"; assert(s.compare(0, 1, {"abc", 1}) < 0); diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string_size_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string_size_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string_size_size.pass.cpp @@ -17,6 +17,7 @@ #include <cassert> #include "min_allocator.h" +#include "test_allocator.h" #include "test_macros.h" @@ -6008,6 +6009,7 @@ test<std::string>(); #if TEST_STD_VER >= 11 test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return 0; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string_view.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string_view.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string_view.pass.cpp @@ -15,6 +15,7 @@ #include <cassert> #include "min_allocator.h" +#include "test_allocator.h" #include "test_macros.h" @@ -364,6 +365,7 @@ test_string<char, std::allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_compare/string.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_compare/string.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_compare/string.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_compare/string.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" TEST_CONSTEXPR_CXX20 int sign(int x) { if (x == 0) @@ -54,6 +55,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); { // LWG 2946 std::string s = " !"; assert(s.compare({"abc", 1}) < 0); diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_compare/string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_compare/string_view.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_compare/string_view.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_compare/string_view.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" TEST_CONSTEXPR_CXX20 int sign(int x) { if (x == 0) @@ -57,6 +58,7 @@ test_string<char, std::allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/char_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/char_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/char_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/char_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void @@ -68,6 +69,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/pointer_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/pointer_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/pointer_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void @@ -146,6 +147,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/pointer_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/pointer_size_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/pointer_size_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/pointer_size_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void @@ -377,6 +378,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/string_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/string_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/string_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/string_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x) { @@ -146,6 +147,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); { // LWG 2946 std::string s = " !"; assert(s.find_first_not_of({"abc", 1}) == 0); diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/string_view_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/string_view_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/string_view_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/string_view_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S, class SV> TEST_CONSTEXPR_CXX20 void test(const S& s, SV sv, typename S::size_type pos, typename S::size_type x) { @@ -149,6 +150,7 @@ test_string<char, std::allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/char_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/char_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/char_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/char_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void @@ -66,6 +67,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/pointer_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/pointer_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/pointer_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void @@ -147,6 +148,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/pointer_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/pointer_size_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/pointer_size_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/pointer_size_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void @@ -377,6 +378,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/string_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/string_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/string_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/string_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x) { @@ -146,6 +147,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); { // LWG 2946 std::string s = " !"; assert(s.find_first_of({"abc", 1}) == std::string::npos); diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/string_view_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/string_view_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/string_view_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/string_view_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S, class SV> TEST_CONSTEXPR_CXX20 void test(const S& s, SV sv, typename S::size_type pos, typename S::size_type x) { @@ -149,6 +150,7 @@ test_string<char, std::allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/char_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/char_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/char_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/char_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void @@ -66,6 +67,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/pointer_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/pointer_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/pointer_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void @@ -147,6 +148,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/pointer_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/pointer_size_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/pointer_size_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/pointer_size_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void @@ -377,6 +378,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/string_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/string_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/string_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/string_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x) { @@ -146,6 +147,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); { // LWG 2946 std::string s = " !"; assert(s.find_last_not_of({"abc", 1}) == s.size() - 1); diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/string_view_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/string_view_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/string_view_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/string_view_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S, class SV> TEST_CONSTEXPR_CXX20 void test(const S& s, SV sv, typename S::size_type pos, typename S::size_type x) { @@ -149,6 +150,7 @@ test_string<char, std::allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/char_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/char_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/char_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/char_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void @@ -66,6 +67,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/pointer_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/pointer_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/pointer_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void @@ -147,6 +148,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/pointer_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/pointer_size_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/pointer_size_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/pointer_size_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void @@ -377,6 +378,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/string_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/string_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/string_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/string_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x) { @@ -146,6 +147,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); { // LWG 2946 std::string s = " !"; assert(s.find_last_of({"abc", 1}) == std::string::npos); diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/string_view_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/string_view_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/string_view_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/string_view_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S, class SV> TEST_CONSTEXPR_CXX20 void test(const S& s, SV sv, typename S::size_type pos, typename S::size_type x) { @@ -148,6 +149,7 @@ test_string<char, std::allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find/char_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find/char_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find/char_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find/char_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void @@ -66,6 +67,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find/pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find/pointer_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find/pointer_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find/pointer_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void @@ -151,6 +152,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find/pointer_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find/pointer_size_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find/pointer_size_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find/pointer_size_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void @@ -377,6 +378,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find/string_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find/string_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find/string_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find/string_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x) { @@ -146,6 +147,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif #if TEST_STD_VER >= 11 { // LWG 2946 diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_find/string_view_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find/string_view_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_find/string_view_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_find/string_view_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S, class SV> TEST_CONSTEXPR_CXX20 void test(const S& s, SV sv, typename S::size_type pos, typename S::size_type x) { @@ -148,6 +149,7 @@ test_string<char, std::allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_rfind/char_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_rfind/char_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_rfind/char_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_rfind/char_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void @@ -66,6 +67,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_rfind/pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_rfind/pointer_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_rfind/pointer_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_rfind/pointer_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void @@ -152,6 +153,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_rfind/pointer_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_rfind/pointer_size_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_rfind/pointer_size_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_rfind/pointer_size_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void @@ -377,6 +378,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_rfind/string_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_rfind/string_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_rfind/string_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_rfind/string_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x) { @@ -146,6 +147,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); { // LWG 2946 std::string s = " !"; assert(s.rfind({"abc", 1}) == std::string::npos); diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_rfind/string_view_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_rfind/string_view_size.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_rfind/string_view_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_rfind/string_view_size.pass.cpp @@ -15,6 +15,7 @@ #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S, class SV> TEST_CONSTEXPR_CXX20 void test(const S& s, SV sv, typename S::size_type pos, typename S::size_type x) { @@ -148,6 +149,7 @@ test_string<char, std::allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_substr/substr.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_substr/substr.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_substr/substr.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_substr/substr.pass.cpp @@ -19,6 +19,7 @@ #include "test_allocator.h" #include "test_macros.h" #include "min_allocator.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test(const S& s, typename S::size_type pos, typename S::size_type n) { @@ -108,6 +109,7 @@ test_string<std::string>(); #if TEST_STD_VER >= 11 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.ops/string_substr/substr_rvalue.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_substr/substr_rvalue.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.ops/string_substr/substr_rvalue.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.ops/string_substr/substr_rvalue.pass.cpp @@ -73,6 +73,7 @@ test_string<std::basic_string<CharT, CharTraits, std::allocator<CharT>>>(); test_string<std::basic_string<CharT, CharTraits, min_allocator<CharT>>>(); test_string<std::basic_string<CharT, CharTraits, test_allocator<CharT>>>(); + test_string<std::basic_string<CharT, CharTraits, fancy_pointer_allocator<CharT>>>(); } template <class CharT> diff --git a/libcxx/test/std/strings/basic.string/string.require/contiguous.pass.cpp b/libcxx/test/std/strings/basic.string/string.require/contiguous.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.require/contiguous.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.require/contiguous.pass.cpp @@ -55,6 +55,7 @@ test_string<char, test_allocator>(); #if TEST_STD_VER >= 11 test_string<char, min_allocator>(); + test_string<char, fancy_pointer_allocator>(); #endif return true; diff --git a/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.char.pass.cpp b/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.char.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.char.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.char.pass.cpp @@ -15,6 +15,7 @@ #include <cassert> #include "test_macros.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test_string() { @@ -31,6 +32,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string<std::string>(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); return true; } diff --git a/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.ptr.pass.cpp b/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.ptr.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.ptr.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.ptr.pass.cpp @@ -15,6 +15,7 @@ #include <cassert> #include "test_macros.h" +#include "test_allocator.h" template <class S> TEST_CONSTEXPR_CXX20 void test_string() { @@ -59,6 +60,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string<std::string>(); + test_string<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); return true; } diff --git a/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.string_view.pass.cpp --- a/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.string_view.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.string_view.pass.cpp @@ -15,6 +15,7 @@ #include <cassert> #include "test_macros.h" +#include "test_allocator.h" template <class CharT, template <class> class Alloc> TEST_CONSTEXPR_CXX20 void test_string() { @@ -70,6 +71,7 @@ TEST_CONSTEXPR_CXX20 bool test() { test_string<char, std::allocator>(); + test_string<char, fancy_pointer_allocator>(); return true; } diff --git a/libcxx/test/std/strings/basic.string/types.pass.cpp b/libcxx/test/std/strings/basic.string/types.pass.cpp --- a/libcxx/test/std/strings/basic.string/types.pass.cpp +++ b/libcxx/test/std/strings/basic.string/types.pass.cpp @@ -39,6 +39,7 @@ #include "test_traits.h" #include "test_allocator.h" #include "min_allocator.h" +#include "test_allocator.h" template <class Traits, class Allocator> void test() { @@ -79,6 +80,7 @@ static_assert((std::is_same<std::basic_string<char>::allocator_type, std::allocator<char> >::value), ""); #if TEST_STD_VER >= 11 test<std::char_traits<char>, min_allocator<char> >(); + test<std::char_traits<char>, fancy_pointer_allocator<char> >(); #endif return 0; diff --git a/libcxx/test/std/strings/strings.erasure/erase.pass.cpp b/libcxx/test/std/strings/strings.erasure/erase.pass.cpp --- a/libcxx/test/std/strings/strings.erasure/erase.pass.cpp +++ b/libcxx/test/std/strings/strings.erasure/erase.pass.cpp @@ -66,8 +66,9 @@ int main(int, char**) { test<std::string>(); - test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>(); - test<std::basic_string<char, std::char_traits<char>, test_allocator<char>>>(); + test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, test_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); return 0; } diff --git a/libcxx/test/std/strings/strings.erasure/erase_if.pass.cpp b/libcxx/test/std/strings/strings.erasure/erase_if.pass.cpp --- a/libcxx/test/std/strings/strings.erasure/erase_if.pass.cpp +++ b/libcxx/test/std/strings/strings.erasure/erase_if.pass.cpp @@ -68,8 +68,9 @@ int main(int, char**) { test<std::string>(); - test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>(); - test<std::basic_string<char, std::char_traits<char>, test_allocator<char>>>(); + test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, test_allocator<char> > >(); + test<std::basic_string<char, std::char_traits<char>, fancy_pointer_allocator<char> > >(); return 0; } diff --git a/libcxx/test/support/test_allocator.h b/libcxx/test/support/test_allocator.h --- a/libcxx/test/support/test_allocator.h +++ b/libcxx/test/support/test_allocator.h @@ -17,6 +17,7 @@ #include <cstdlib> #include <climits> #include <cassert> +#include <iterator> #include "test_macros.h" @@ -511,8 +512,196 @@ return ptr; } + } // namespace detail +template <class T> +class fancy_pointer { +public: + // For the std::pointer_traits interface. + using pointer = T*; + using element_type = T; + using difference_type = std::ptrdiff_t; + + template <class U> + using rebind = fancy_pointer<U>; + + // For the std::iterator_traits interface. + using value_type = typename std::remove_cv<T>::type; + using reference = typename std::add_lvalue_reference<T>::type; + using iterator_category = std::random_access_iterator_tag; + + TEST_CONSTEXPR_CXX14 fancy_pointer() TEST_NOEXCEPT : ptr_(nullptr) {} + TEST_CONSTEXPR_CXX14 fancy_pointer(T* p) TEST_NOEXCEPT : ptr_(p) {} + + template <typename T2> + TEST_CONSTEXPR_CXX14 fancy_pointer(const fancy_pointer<T2>& other) TEST_NOEXCEPT : ptr_(other.get()) {} + + TEST_CONSTEXPR_CXX14 operator T*() const TEST_NOEXCEPT { return ptr_; } + TEST_CONSTEXPR_CXX14 fancy_pointer(fancy_pointer&&) TEST_NOEXCEPT = default; + TEST_CONSTEXPR_CXX14 fancy_pointer(const fancy_pointer&) TEST_NOEXCEPT = default; + TEST_CONSTEXPR_CXX14 fancy_pointer& operator=(fancy_pointer&&) TEST_NOEXCEPT = default; + TEST_CONSTEXPR_CXX14 fancy_pointer& operator=(const fancy_pointer&) TEST_NOEXCEPT = default; + TEST_CONSTEXPR_CXX20 ~fancy_pointer() TEST_NOEXCEPT = default; + TEST_CONSTEXPR_CXX14 operator fancy_pointer<const T>() const TEST_NOEXCEPT { return fancy_pointer<const T>(get()); } + TEST_CONSTEXPR_CXX14 T& operator*() const TEST_NOEXCEPT { return *ptr_; } + TEST_CONSTEXPR_CXX14 T* operator->() const TEST_NOEXCEPT { return ptr_; } + TEST_CONSTEXPR_CXX14 explicit operator bool() const TEST_NOEXCEPT { return ptr_; } + TEST_CONSTEXPR_CXX14 T* get() const TEST_NOEXCEPT { return ptr_; } + + TEST_CONSTEXPR_CXX14 fancy_pointer& operator++() TEST_NOEXCEPT { + ++ptr_; + return *this; + } + TEST_CONSTEXPR_CXX14 fancy_pointer operator++(int) TEST_NOEXCEPT { + fancy_pointer tmp(*this); + ++ptr_; + return tmp; + } + + TEST_CONSTEXPR_CXX14 fancy_pointer& operator--() TEST_NOEXCEPT { + --ptr_; + return *this; + } + TEST_CONSTEXPR_CXX14 fancy_pointer operator--(int) TEST_NOEXCEPT { + fancy_pointer tmp(*this); + --ptr_; + return tmp; + } + + TEST_CONSTEXPR_CXX14 fancy_pointer& operator+=(difference_type n) TEST_NOEXCEPT { + ptr_ += n; + return *this; + } + + TEST_CONSTEXPR_CXX14 fancy_pointer& operator-=(difference_type n) TEST_NOEXCEPT { + ptr_ -= n; + return *this; + } + + TEST_CONSTEXPR_CXX14 fancy_pointer operator+(difference_type n) const TEST_NOEXCEPT { + fancy_pointer tmp(*this); + tmp += n; + return tmp; + } + + TEST_CONSTEXPR_CXX14 fancy_pointer operator-(difference_type n) const TEST_NOEXCEPT { + fancy_pointer tmp(*this); + tmp -= n; + return tmp; + } + + TEST_CONSTEXPR_CXX14 reference operator[](difference_type n) const TEST_NOEXCEPT { return ptr_[n]; } + + friend TEST_CONSTEXPR_CXX14 fancy_pointer operator+(difference_type x, fancy_pointer y) TEST_NOEXCEPT { + return y + x; + } + + friend TEST_CONSTEXPR_CXX14 bool operator<(fancy_pointer x, fancy_pointer y) TEST_NOEXCEPT { return x.ptr_ < y.ptr_; } + friend TEST_CONSTEXPR_CXX14 bool operator>(fancy_pointer x, fancy_pointer y) TEST_NOEXCEPT { return y < x; } + friend TEST_CONSTEXPR_CXX14 bool operator<=(fancy_pointer x, fancy_pointer y) TEST_NOEXCEPT { return !(y < x); } + friend TEST_CONSTEXPR_CXX14 bool operator>=(fancy_pointer x, fancy_pointer y) TEST_NOEXCEPT { return !(x < y); } + + static TEST_CONSTEXPR_CXX14 fancy_pointer pointer_to(reference ref) TEST_NOEXCEPT { return fancy_pointer(&ref); } + + T* ptr_; +}; + +template <typename T> +TEST_CONSTEXPR_CXX14 typename fancy_pointer<T>::difference_type +operator-(fancy_pointer<T> x, fancy_pointer<T> y) TEST_NOEXCEPT { + return x.ptr_ - y.ptr_; +} + +template <typename T> +TEST_CONSTEXPR_CXX14 typename fancy_pointer<T>::difference_type +operator-(fancy_pointer<const T> x, fancy_pointer<T> y) TEST_NOEXCEPT { + return x.ptr_ - y.ptr_; +} + +template <typename T> +TEST_CONSTEXPR_CXX14 typename fancy_pointer<T>::difference_type +operator-(fancy_pointer<T> x, fancy_pointer<const T> y) TEST_NOEXCEPT { + return x.ptr_ - y.ptr_; +} + +template <typename T> +TEST_CONSTEXPR_CXX14 typename fancy_pointer<T>::difference_type +operator-(fancy_pointer<const T> x, fancy_pointer<const T> y) TEST_NOEXCEPT { + return x.ptr_ - y.ptr_; +} + +template <typename T> +TEST_CONSTEXPR_CXX14 bool operator==(fancy_pointer<T> x, fancy_pointer<T> y) TEST_NOEXCEPT { + return x.get() == y.get(); +} + +template <typename T> +TEST_CONSTEXPR_CXX14 bool operator==(fancy_pointer<const T> x, fancy_pointer<T> y) TEST_NOEXCEPT { + return x.get() == y.get(); +} + +template <typename T> +TEST_CONSTEXPR_CXX14 bool operator==(fancy_pointer<T> x, fancy_pointer<const T> y) TEST_NOEXCEPT { + return x.get() == y.get(); +} + +template <typename T> +TEST_CONSTEXPR_CXX14 bool operator==(fancy_pointer<const T> x, fancy_pointer<const T> y) TEST_NOEXCEPT { + return x.get() == y.get(); +} + +template <typename T> +TEST_CONSTEXPR_CXX14 bool operator!=(fancy_pointer<T> x, fancy_pointer<T> y) TEST_NOEXCEPT { + return !(x == y); +} + +template <typename T> +TEST_CONSTEXPR_CXX14 bool operator!=(fancy_pointer<const T> x, fancy_pointer<T> y) TEST_NOEXCEPT { + return !(x == y); +} + +template <typename T> +TEST_CONSTEXPR_CXX14 bool operator!=(fancy_pointer<T> x, fancy_pointer<const T> y) TEST_NOEXCEPT { + return !(x == y); +} + +template <typename T> +TEST_CONSTEXPR_CXX14 bool operator!=(fancy_pointer<const T> x, fancy_pointer<const T> y) TEST_NOEXCEPT { + return !(x == y); +} + +template <class T> +class fancy_pointer_allocator : public std::allocator<T> { + typedef std::allocator<T> base; + +public: + typedef T value_type; + typedef fancy_pointer<T> pointer; + typedef fancy_pointer<const T> const_pointer; + typedef value_type& reference; + typedef const value_type& const_reference; + typedef std::size_t size_type; + typedef std::ptrdiff_t difference_type; + + template <class U> + struct rebind { + typedef fancy_pointer_allocator<U> other; + }; + + TEST_CONSTEXPR_CXX20 fancy_pointer_allocator() TEST_NOEXCEPT {} + + template <class U> + TEST_CONSTEXPR explicit fancy_pointer_allocator(fancy_pointer_allocator<U>) TEST_NOEXCEPT {} + + TEST_CONSTEXPR_CXX20 pointer allocate(size_t n) { return base::allocate(n); } + TEST_CONSTEXPR_CXX20 void deallocate(pointer p, size_t n) { return base::deallocate(p, n); } + +#if TEST_STD_VER > 20 + TEST_CONSTEXPR_CXX20 std::allocation_result<pointer> allocate_at_least(std::size_t n) { return {allocate(n), n}; } +#endif +}; + template <class T, std::size_t N> class limited_allocator { template <class U, std::size_t UN>