This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of CD1 status.

### 643. Impossible "as if" clauses

Section: 29.10.2 [filebuf], 28.4.3.3.3 [facet.num.put.virtuals] Status: CD1 Submitter: Daniel Krügler Opened: 2007-02-20 Last modified: 2016-01-28

Priority: Not Prioritized

View all issues with CD1 status.

Discussion:

The current standard 14882:2003(E) as well as N2134 have the following defects:

29.10.2 [filebuf]/5 says:

> In order to support file I/O and multibyte/wide character conversion, conversions are performed using members of a facet, referred to as `a_codecvt` in following sections, obtained "as if" by

> >     codecvt<charT,char,typename traits::state_type> a_codecvt =
> >       use_facet<codecvt<charT,char,typename traits::state_type> >(getloc());

`use_facet` returns a `const facet` reference and no facet is copyconstructible, so the codecvt construction should fail to compile.

A similar issue arises in 28.4.3.3.3 [facet.num.put.virtuals]/15 for `num_punct`.

Proposed resolution:

In 29.10.2 [filebuf]/5 change the "as if" code

>     const codecvt<charT,char,typename traits::state_type>& a_codecvt =
>       use_facet<codecvt<charT,char,typename traits::state_type> >(getloc());

In 28.4.3.3.3 [facet.num.put.virtuals]/15 (This is para 5 in N2134) change

> A local variable `punct` is initialized via

> >     const numpunct<charT>& punct = use_facet< numpunct<charT> >(str.getloc() );

(Please note also the additional provided trailing semicolon)