1252. wbuffer_convert::state_type inconsistency

Section: D.18.2 [depr.conversions.buffer] Status: C++11 Submitter: Bo Persson Opened: 2009-10-21 Last modified: 2017-05-13

Priority: Not Prioritized

View other active issues in [depr.conversions.buffer].

View all other issues in [depr.conversions.buffer].

View all issues with C++11 status.

Discussion:

The synopsis for wbuffer_convert [conversions.buffer]/2 contains

typedef typename Tr::state_type   state_type; 

making state_type a synonym for (possibly) some char_traits<x>::state_type.

However, in paragraph 9 of the same section, we have

typedef typename Codecvt::state_type state_type;

The type shall be a synonym for Codecvt::state_type.

From what I can see, it might be hard to implement wbuffer_convert if the types were not both std::mbstate_t, but I cannot find a requirement that they must be the same type.

[ Batavia 2010: ]

Howard to draft wording, move to Review. Run it by Bill. Need to move this in Madrid.

[2011-03-06: Howard drafts wording]

[2011-03-24 Madrid meeting]

Moved to Immediate

Proposed resolution:

Modify the state_type typedef in the synopsis of [conversions.buffer] p.2 as shown [This makes the synopsis consistent with [conversions.buffer] p.9]:

namespace std {
template<class Codecvt,
  class Elem = wchar_t,
  class Tr = std::char_traits<Elem> >
class wbuffer_convert
  : public std::basic_streambuf<Elem, Tr> {
public:
  typedef typename TrCodecvt::state_type state_type;
  […]
};
}