summaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/pr106248.cc
blob: 6d89a0e5fefc1cf5f52f302b019d2f4dfcc7f704 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// { dg-do run }

#include <sstream>
#include <testsuite_hooks.h>

void
test_pr106248()
{
  char buf[5] = {'x', 'x', 'x', 'x', 'x'};
  std::string s("  four");
  std::istringstream in(s);
  in >> buf;
#if __cplusplus >= 202002L
  // Extraction stops because buffer is full.
  VERIFY( in.good() );
#else
  // PR libstdc++/106248
  // Extraction stops because all input has been consumed and eofbit is set.
  VERIFY( in.eof() );
#endif
  // Extracted string must be null-terminated.
  VERIFY( buf[4] == '\0' );
  VERIFY( std::string(buf) == "four" );

  in.clear();
  in.str(s);
  for (int i = 0; i < 5; ++i)
    s[i] = 'x';

  in.width(5);
  in >> buf;
  // Extraction stops due to field width, eofbit not set.
  VERIFY( in.good() );
  VERIFY( std::string(buf) == "four" );
}

int main()
{
  test_pr106248();
}