Title
Missing traits dependencies in operational semantics of extended manipulators
Status
c++11
Section
[ext.manip]
Submitter
Daniel Krügler

Created on 2008-03-01.00:00:00 last changed 153 months ago

Messages

Date: 2010-10-21.18:28:33

Proposed resolution:

In [ext.manip]/4 within function f replace the first line

template <class charT, class traits, class moneyT> 
void f(basic_ios<charT, traits>& str, moneyT& mon, bool intl) { 
   typedef istreambuf_iterator<charT, traits> Iter;
   ...

In [ext.manip]/5 remove the first template charT parameter:

template <class charT, class moneyT> unspecified put_money(const moneyT& mon, bool intl = false);

In [ext.manip]/6 within function f replace the first line

template <class charT, class traits, class moneyT> 
void f(basic_ios<charT, traits>& str, const moneyT& mon, bool intl) { 
  typedef ostreambuf_iterator<charT, traits> Iter;
  ...

In [ext.manip]/8 within function f replace the first line

template <class charT, class traits> 
void f(basic_ios<charT, traits>& str, struct tm *tmb, const charT *fmt) { 
  typedef istreambuf_iterator<charT, traits> Iter;
  ...

In [ext.manip]/10 within function f replace the first line

template <class charT, class traits> 
void f(basic_ios<charT, traits>& str, const struct tm *tmb, const charT *fmt) { 
  typedef ostreambuf_iterator<charT, traits> Iter;
  ...

In [iostream.format], Header <iomanip> synopsis change:

template <class charT, class moneyT> T8 put_money(const moneyT& mon, bool intl = false);
Date: 2010-10-21.18:28:33

[ Batavia (2009-05): ]

This appears to be an issue of presentation.

We agree with the proposed resolution. Move to Tentatively Ready.

Date: 2008-03-01.00:00:00

The recent draft (as well as the original proposal n2072) uses an operational semantic for get_money ([ext.manip]/4) and put_money ([ext.manip]/6), which uses

istreambuf_iterator<charT>

and

ostreambuf_iterator<charT>

resp, instead of the iterator instances, with explicitly provided traits argument (The operational semantic defined by f is also traits dependent). This is an obvious oversight because both *stream_buf c'tors expect a basic_streambuf<charT,traits> as argument.

The same problem occurs within the get_time and put_time semantic where additional to the problem we have an editorial issue in get_time (streambuf_iterator instead of istreambuf_iterator).

History
Date User Action Args
2011-08-23 20:07:26adminsetstatus: wp -> c++11
2010-10-21 18:28:33adminsetmessages: + msg3850
2010-10-21 18:28:33adminsetmessages: + msg3849
2008-03-01 00:00:00admincreate