Section: 31.10.3 [filebuf], 28.3.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:
31.10.3 [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" bycodecvt<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.3.4.3.3.3 [facet.num.put.virtuals]/15 for num_punct
.
Proposed resolution:
In 31.10.3 [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.3.4.3.3.3 [facet.num.put.virtuals]/15 (This is para 5 in N2134) change
A local variable
punct
is initialized viaconst numpunct<charT>& punct = use_facet< numpunct<charT> >(str.getloc() );
(Please note also the additional provided trailing semicolon)