diff options
Diffstat (limited to 'libcxx/test/std/input.output/string.streams/stringstream.cons')
-rw-r--r-- | libcxx/test/std/input.output/string.streams/stringstream.cons/string.pass.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/libcxx/test/std/input.output/string.streams/stringstream.cons/string.pass.cpp b/libcxx/test/std/input.output/string.streams/stringstream.cons/string.pass.cpp index 3776f17f530..43b9df68674 100644 --- a/libcxx/test/std/input.output/string.streams/stringstream.cons/string.pass.cpp +++ b/libcxx/test/std/input.output/string.streams/stringstream.cons/string.pass.cpp @@ -18,6 +18,16 @@ #include <sstream> #include <cassert> +template<typename T> +struct NoDefaultAllocator : std::allocator<T> +{ + template<typename U> struct rebind { using other = NoDefaultAllocator<U>; }; + NoDefaultAllocator(int id) : id(id) { } + template<typename U> NoDefaultAllocator(const NoDefaultAllocator<U>& a) : id(a.id) { } + int id; +}; + + int main() { { @@ -46,4 +56,13 @@ int main() ss << i << ' ' << 123; assert(ss.str() == L"456 1236 "); } + { // This is https://bugs.llvm.org/show_bug.cgi?id=33727 + typedef std::basic_string <char, std::char_traits<char>, NoDefaultAllocator<char> > S; + typedef std::basic_stringbuf<char, std::char_traits<char>, NoDefaultAllocator<char> > SB; + + S s(NoDefaultAllocator<char>(1)); + SB sb(s); + // This test is not required by the standard, but *where else* could it get the allocator? + assert(sb.str().get_allocator() == s.get_allocator()); + } } |