381. detection of invalid mbstate_t in codecvt

Section: 28.3.4.2.6 [locale.codecvt.byname] Status: CD1 Submitter: Martin Sebor Opened: 2002-09-06 Last modified: 2016-01-28

Priority: Not Prioritized

View all other issues in [locale.codecvt.byname].

View all issues with CD1 status.

Discussion:

All but one codecvt member functions that take a state_type argument list as one of their preconditions that the state_type argument have a valid value. However, according to 22.2.1.5.2, p6, codecvt::do_unshift() is the only codecvt member that is supposed to return error if the state_type object is invalid.

It seems to me that the treatment of state_type by all codecvt member functions should be the same and the current requirements should be changed. Since the detection of invalid state_type values may be difficult in general or computationally expensive in some specific cases, I propose the following:

Proposed resolution:

Add a new paragraph before 22.2.1.5.2, p5, and after the function declaration below

    result do_unshift(stateT& state,
    externT* to, externT* to_limit, externT*& to_next) const;

as follows:

    Requires: (to <= to_end) well defined and true; state initialized,
    if at the beginning of a sequence, or else equal to the result of
    converting the preceding characters in the sequence.

and change the text in Table 54, row 4, the error row, under the heading Meaning, from

    state has invalid value

to

    an unspecified error has occurred

Rationale:

The intent is that implementations should not be required to detect invalid state values; such a requirement appears nowhere else. An invalid state value is a precondition violation, i.e. undefined behavior. Implementations that do choose to detect invalid state values, or that choose to detect any other kind of error, may return error as an indication.