diff options
Diffstat (limited to 'test/std/strings/basic.string/string.cons/substr.pass.cpp')
-rw-r--r-- | test/std/strings/basic.string/string.cons/substr.pass.cpp | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/test/std/strings/basic.string/string.cons/substr.pass.cpp b/test/std/strings/basic.string/string.cons/substr.pass.cpp index 2e42be13a842..a10239bb3414 100644 --- a/test/std/strings/basic.string/string.cons/substr.pass.cpp +++ b/test/std/strings/basic.string/string.cons/substr.pass.cpp @@ -11,14 +11,21 @@ // <string> // basic_string(const basic_string<charT,traits,Allocator>& str, -// size_type pos, size_type n = npos, +// size_type pos, size_type n, +// const Allocator& a = Allocator()); +// +// basic_string(const basic_string<charT,traits,Allocator>& str, +// size_type pos, // const Allocator& a = Allocator()); #include <string> #include <stdexcept> #include <algorithm> +#include <vector> +#include <scoped_allocator> #include <cassert> +#include "test_macros.h" #include "test_allocator.h" #include "min_allocator.h" @@ -31,7 +38,7 @@ test(S str, unsigned pos) try { S s2(str, pos); - assert(s2.__invariants()); + LIBCPP_ASSERT(s2.__invariants()); assert(pos <= str.size()); unsigned rlen = str.size() - pos; assert(s2.size() == rlen); @@ -54,7 +61,7 @@ test(S str, unsigned pos, unsigned n) try { S s2(str, pos, n); - assert(s2.__invariants()); + LIBCPP_ASSERT(s2.__invariants()); assert(pos <= str.size()); unsigned rlen = std::min<unsigned>(str.size() - pos, n); assert(s2.size() == rlen); @@ -77,7 +84,7 @@ test(S str, unsigned pos, unsigned n, const typename S::allocator_type& a) try { S s2(str, pos, n, a); - assert(s2.__invariants()); + LIBCPP_ASSERT(s2.__invariants()); assert(pos <= str.size()); unsigned rlen = std::min<unsigned>(str.size() - pos, n); assert(s2.size() == rlen); @@ -91,6 +98,20 @@ test(S str, unsigned pos, unsigned n, const typename S::allocator_type& a) } } +#if TEST_STD_VER >= 11 +void test2583() +{ // LWG #2583 + typedef std::basic_string<char, std::char_traits<char>, test_allocator<char> > StringA; + std::vector<StringA, std::scoped_allocator_adaptor<test_allocator<StringA>>> vs; + StringA s{"1234"}; + vs.emplace_back(s, 2); + + try { vs.emplace_back(s, 5); } + catch (const std::out_of_range&) { return; } + assert(false); +} +#endif + int main() { { @@ -131,7 +152,7 @@ int main() test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A(7)), 50, 10, A(8)); test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A(7)), 50, 100, A(8)); } -#if __cplusplus >= 201103L +#if TEST_STD_VER >= 11 { typedef min_allocator<char> A; typedef std::basic_string<char, std::char_traits<char>, A> S; @@ -170,5 +191,7 @@ int main() test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A()), 50, 10, A()); test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A()), 50, 100, A()); } + + test2583(); #endif } |