diff options
Diffstat (limited to 'libcxx/test/std/strings/basic.string/string.nonmembers/string.io/stream_extract.pass.cpp')
-rw-r--r-- | libcxx/test/std/strings/basic.string/string.nonmembers/string.io/stream_extract.pass.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
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 index 389701d1d51..92061e2c476 100644 --- 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 @@ -18,6 +18,7 @@ #include <cassert> #include "min_allocator.h" +#include "test_macros.h" int main(int, char**) { @@ -65,6 +66,44 @@ int main(int, char**) in >> s; assert(in.fail()); } +#ifndef TEST_HAS_NO_EXCEPTIONS + { + std::stringbuf sb; + std::istream is(&sb); + is.exceptions(std::ios::failbit); + + bool threw = false; + try { + std::string s; + is >> s; + } catch (std::ios::failure const&) { + threw = true; + } + + assert(!is.bad()); + assert(is.fail()); + assert(is.eof()); + assert(threw); + } + { + std::stringbuf sb; + std::istream is(&sb); + is.exceptions(std::ios::eofbit); + + bool threw = false; + try { + std::string s; + is >> s; + } catch (std::ios::failure const&) { + threw = true; + } + + assert(!is.bad()); + assert(is.fail()); + assert(is.eof()); + assert(threw); + } +#endif // TEST_HAS_NO_EXCEPTIONS #if TEST_STD_VER >= 11 { typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; |