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.
Section: 28.9.2 [filebuf], 27.4.2.2.2 [facet.num.put.virtuals] Status: CD1 Submitter: Daniel Krügler Opened: 2007-02-20 Last modified: 2019-01-01
Priority: Not Prioritized
View all issues with CD1 status.
Discussion:
The current standard 14882:2003(E) as well as N2134 have the following defects:
28.9.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 27.4.2.2.2 [facet.num.put.virtuals]/15 for num_punct.
Proposed resolution:
In 28.9.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 27.4.2.2.2 [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)