Title
Excessive const-qualification
Status
nad
Section
[input.output]
Submitter
Walter Brown, Marc Paterno

Created on 2002-05-10.00:00:00 last changed 164 months ago

Messages

Date: 2010-10-21.18:28:33

Rationale:

The existing specification is a bit sloppy, but there's no particular reason to change this other than tidiness, and there are a number of ways in which streams might have been designed differently if we were starting today. There's no evidence that the existing constness policy is harming users. We might consider a different constness policy as part of a full stream redesign.

Date: 2010-10-21.18:28:33

Proposed resolution:

In 27.4.4 and 27.4.4.2

Replace

  basic_ostream<charT,traits>* tie() const;

with

  basic_ostream<charT,traits>* tie();
  const basic_ostream<charT,traits>* tie() const;

and replace

  basic_streambuf<charT,traits>* rdbuf() const;

with

  basic_streambuf<charT,traits>* rdbuf();
  const basic_streambuf<charT,traits>* rdbuf() const;

In 27.5.2 and 27.5.2.3.1

Replace

  char_type* eback() const;

with

  char_type* eback();
  const char_type* eback() const;

Replace

  char_type gptr() const;

with

  char_type* gptr();
  const char_type* gptr() const;

Replace

  char_type* egptr() const;

with

  char_type* egptr();
  const char_type* egptr() const;

In 27.5.2 and 27.5.2.3.2

Replace

  char_type* pbase() const;

with

  char_type* pbase();
  const char_type* pbase() const;

Replace

  char_type* pptr() const;

with

  char_type* pptr();
  const char_type* pptr() const;

Replace

  char_type* epptr() const;

with

  char_type* epptr();
  const char_type* epptr() const;

In 27.7.2, 27.7.2.2, 27.7.3 27.7.3.2, 27.7.4, and 27.7.6

Replace

  basic_stringbuf<charT,traits,Allocator>* rdbuf() const;

with

  basic_stringbuf<charT,traits,Allocator>* rdbuf();
  const basic_stringbuf<charT,traits,Allocator>* rdbuf() const;

In 27.8.1.5, 27.8.1.7, 27.8.1.8, 27.8.1.10, 27.8.1.11, and 27.8.1.13

Replace

  basic_filebuf<charT,traits>* rdbuf() const;

with

  basic_filebuf<charT,traits>* rdbuf();
  const basic_filebuf<charT,traits>* rdbuf() const;
Date: 2010-10-21.18:28:33

[ Santa Cruz: the real issue is that we've got const member functions that return pointers to non-const, and N1360 proposes replacing them by overloaded pairs. There isn't a consensus about whether this is a real issue, since we've never said what our constness policy is for iostreams. N1360 relies on a distinction between physical constness and logical constness; that distinction, or those terms, does not appear in the standard. ]

Date: 2002-05-10.00:00:00

The following member functions are declared const, yet return non-const pointers. We believe they are should be changed, because they allow code that may surprise the user. See document N1360 for details and rationale.

History
Date User Action Args
2010-10-21 18:28:33adminsetmessages: + msg2372
2010-10-21 18:28:33adminsetmessages: + msg2371
2010-10-21 18:28:33adminsetmessages: + msg2370
2002-05-10 00:00:00admincreate