pg 380 after the first paragraph add: "The clone() function is used to allocate a copy of an exception on free store. This copy will survive the exception handler's cleanup of local variables."
Chapter 17:
pg 493 the argument to bitset'c onstructor requires a conversion to string:
bitset< 10> b4(string("1010101010")); // 1010101010
bitset< 10> b5(string("10110111011110",4)); // 0111011110
bitset< 10> b6(string("10110111011110",2,8)); // 0011011101
bitset< 10> b7(string("n0g00d")); // invalid_argument thrown
bitset< 10> b8 = string("n0g00d"); // error: no string to bitset conversion
Chapter 18:
pg 524 s/operator()(const Club&)/operator()(const Club&) const/
Chapter 20:
pg 596 add to class basic_string:
void clear(); // erase all characters
Chapter 21:
pg 633 s/smanip& m)/const smanip& m)/
pg 635 s/<< d << endl;/<< 1.41421 << endl;/
Appendix D:
pg 895 s/&s[pos]/s.begin()+pos/
pg 912 s/Month(x.tm_mon)+1/Month(x.tm_mon+1)/
pg 915 s/(f.put( ... .failed)/(f.put( ... .failed())/
pg 916 s/Month(x.tm_mon)+1/Month(x.tm_mon+1)/
pg 916 s/std::time_get< Ch>/std::time_get< Ch,In>/
pg 917 a better getval():
template< class Ch, class In>
In Date_in< Ch,In>::getval(In b, In e, ios_base& s, ios_base::iostate& r, int* v, Vtype* res) const
// read part of Date: number, day_of_week, or month. Skip whitespace and punctuation.
{
const ctype< Ch>& ct = use_facet< ctype< Ch> >(s.getloc()); // ctype is defined in D.4.5
Ch c;
*res = novalue; // no value found
for (;;) { // skip whitespace and punctuation
if (b == e) return e;
c = *b;
if (!(ct.is(ctype_base::space,c) || ct.is(ctype_base::punct,c))) break;
++b;
}
if (ct.is(ctype_base::digit,c)) { // read integer without regard for numpunct
int i = 0;
do { // turn digit from arbitrary character set into decimal value:
static char const digits[] = "0123456789";
i = i*10 + find(digits,digits+10,ct.narrow(c,' '))-digits;
c = *++b;
} while (ct.is(ctype_base::digit,c));
*v = i;
*res = unknown; // an integer, but we don't know what it represents
return b;
}
if (ct.is(ctype_base::alpha,c)) { // look for name of month or day of week
basic_string< Ch> str;
while (ct.is(ctype_base::alpha,c)) { // read characters into string
str += c;
if (++b == e) break;
c = *b;
}
tm t;
basic_stringstream< Ch> ss(str);
typedef istreambuf_iterator< Ch> SI; // iterator type for ss' buffer
get_monthname(ss.rdbuf(),SI(),s,r,&t); // read from in-memory stream buffer
if ((r&(ios_base::badbit|ios_base::failbit))==0) {
*v= t.tm_mon;
*res = month;
r = 0;
return b;
}
r = 0; // clear state before trying to read a second time
get_weekday(ss.rdbuf(),SI(),s,r,&t); // read from in-memory stream buffer
if ((r&ios_base::badbit)==0) {
*v = t.tm_wday;
*res = dayofweek;
r = 0;
return b;
}
}
r |= ios_base::failbit;
return b;
}
pg 919 replace
template< class Ch, class In = istreambuf_iterator< Ch> > In Date_in::do_get_date(by
template< class Ch, class In> In Date_in< Ch,In>::do_get_date(
pg 922 a better count_spaces():
int count_spaces(const string& s, const locale& loc)
{
const ctype< char>& ct = use_facet< ctype< char> >(loc);
int i = 0;
for(string::const_iterator p = s.begin(); p != s.end(); ++p)
if (ct.is(ctype_base::space,*p)) ++i; // whitespace as defined by ct
return i;
}
pg 922 s/loc.is(space|punct,c)/ct.is(ctype_base::space|ctype_base::punct,c)/
pg 922 s/std::ctype/std::ctype< Ch>/
pg 923 s/std::ctype/std::ctype< Ch>/
Chapter 14:
pg 365 s/program now shrinks/function now shrinks/
Appendix D:
pg 892 s/_byname locale/_byname facet/