Scott Meyers
Modification History and Errata List for Effective C++ CD
Last Updated June 26, 2008
by Scott Meyers
What follows are my notes on what's been changed in the Effective C++ CD since its original publication (i.e., since its first printing) and what I believe may need to be changed in future printings.
The easiest way to use this page is to find out which of the CD's printings you have (it's generally listed at the end of the "Legal Stuff" page, but see below for an exception), then go to the appropriate section of the list and read from that point forward. For example, if you have a copy of the second printing, the changes made to the first printing won't apply to you, because the changes will already be in place in your copy of the CD.
"Isn't there some way to patch the CD's files if they've been copied to a hard drive?," you're probably wondering. Unfortunately, there's not. I've been trying to convince Addison-Wesley (the publisher) that this would be a good idea, but so far I've been unsuccessful. I'm working on it, though.
The list below contains only those changes that do not apply to the material in Effective C++, Second Edition or to More Effective C++, i.e., to places on the CD that are not in the books. The books have their own errata lists. When viewing those lists, note that the CD contains the fifth printing of Effective C++, Second Edition and the seventh printing of More Effective C++. (From here, you may wish to visit the errata list for Effective C++, Second Edition or the errata list for More Effective C++.)
Each entry below includes the following information:
- Date Reported: The date the problem was brought to my attention.
- Who: The initials of the person reporting the problem. The initials "sdm" refer to me. The mapping from other initials to full names is at the bottom of this document.
- What: A description of the problem and the solution.
- Date Fixed: The date on which the problem was fixed. If no date is shown, it means the problem hasn't been fixed yet.
I am always interested in bug reports and suggestions for improvements to the Effective C++ CD. To submit comments, send email to ec++cd@awl.com or to ecppcd@awl.com. (The latter address was added for retrograde mailers that reject the symbol "+" in email addresses, but both addresses go to the same place.)
The following changes were made between the first and second printings. You need to worry about these changes only if you have a copy of the first printing of the CD:
DATE DATE
REPORTED WHO WHAT FIXED
-------- --- ------------------------------------------------------- --------
8/14/98 jd Nothing works under Netscape Navigator 4.05. This is 3/16/99
not really a problem with the CD; it's a problem with
NN 4.05. However, enough people have run into it that
we updated the CD's readme.txt file to mention the
problem, and we modified the CD to issue a warning when
it detects this specific browser. The solution to
the problem is to upgrade to a more recent version of
the browser.
12/12/98 sdm Missing slash between "ANSI" and "ISO" in this sentence 3/16/99
in paragraph 3 of Reeve's article, "In April 1995 the
ANSIISO C++ committee released the Committee Draft of
the C++ Standard."
12/12/98 sdm Single-user license agreement printed on the back of 3/16/99
the CD sleeve prohibits copying the CD. This is
incorrect. The correct license agreement is on the
"Legal Stuff" page of the CD.
12/16/98 sdm Hits 19-21 after searching for "standard" in item 3/16/99
chunking list the hit location as "Untitled".
12/19/98 sdm Link to the MEC++ Web Site in paragraph 3 of the EC++ 3/16/99
Afterword currently goes to the on-CD TOC for MEC++.
This is incorrect. It should go to the book's web site
at AW.
1/ 6/99 dh In paragraph 11 of the Magazine Articles Home Page, the 3/16/99
description of Tom Cargill's article has the words
"little more to exceptions THAT try, throw and catch".
In that sentence, THAT should be THAN.
1/11/99 mr With chapter length chunking, the link above M12 3/16/99
that reads "Continue to Item 13: Catch exceptions by
reference" causes the topic to be reloaded instead of
just scrolling down.
1/11/99 mr In the Counting Objects article's sidebar, the 3/16/99
"invisible" labels after the currency symbols show up
in white on the yellow background. (This happens
everywhere we use a yellow background, e.g., in the
tables in Reeves' article.)
1/11/99 mr The third line of the dedication, "(but mostly for 3/16/99
Nancy).", appears left justified instead of centred.
It centres itself if you resize the browser window.
(This is actually a bug in the browser, but we
implemented a workaround that eliminates the problem.)
1/11/99 mr Jumping to the MEC++ "Efficiency" chapter (chapter 3/16/99
length chunking) via the contents or "Continue to
Efficiency" at the bottom of Item 15, causes the
heading to be at the top of the window so that "Back to
Item 15..." and "Continue to Item 16..." are not
visible.
1/11/99 mr The links at the bottom of the chapter length chunks 3/16/99
say (e.g.) "Continue to Chapter 2: Memory Management"
whereas those at the top of the last item in the
chapter just say "Continue to Memory Management".
Since nowhere are the chapters actually numbered, I
think they should both just say "Continue to Memory
Management".
1/11/99 mr The first chapter chunk in MEC++ (Basics) finishes with 3/16/99
"Back to Introduction"/"Continue to Chapter 2:
Operators". The former should be "Back to Item 4:
Avoid gratuitous default constructors".
1/14/99 sdm Under NN 4.5, turn off context display and search for 3/16/99
"function". The text "Match 1 of 709" at the bottom of
the window is truncated to "Ma".
1/14/99 sdm Using Item chunking and searching for "operator", 3/16/99
matches 41-44 give a location summary of "Untitled".
1/14/99 sdm Missing possessive apostrophes in rollover text for 3/16/99
several buttons in nav areas. (This was fixed by
eliminating all the possessives.)
1/20/99 ch In paragraph 70 of Reeves' article, change "delete" to 3/16/99
"delete[]" in "its definition is almost exactly the
same as for auto_ptr except that it callse delete on
its...".
1/28/99 rmm Some mail systems can't handle plus signs ("+") in 3/16/99
email addresses, thus making it impossible for people
using such mail systems to send mail to
ec++cd@awl.com. We added a new alias for this
address, ecppcd@awl.com.
2/13/99 rr The image in the MEC++ Introduction fails to show up on 3/16/99
Unix systems because the file name I_005a1.GIF should
be entirely in upper case.
2/13/99 rr The image after Item M24, P15 is missing in the 3/16/99
smallest image size. (The file name in the HTML is
missing the .gif extension.)
2/16/99 mr The 2nd- and 3rd-to-last lines of code following 3/16/99
paragraph 59 of Reeves' article are incorrectly
indented.
2/16/99 mr In Reeves' article, the table of Goals and Guidelines 3/16/99
should contain links to the corresponding discussions.
2/16/99 mr In the last line of paragraph 129 of Reeves' article, 3/16/99
lines tend to break between "terminate" and "()".
2/16/99 mr With chapter chunking set, paragraph 47 of Sutter's 3/16/99
article has
ONMOUSEOVER = "self.status = 'Item M20'; return true"
ONMOUSEOUT = "self.status = self.defaultStatus"
in the middle of the paragraph. Needless to say, this
should not be there.
2/17/99 mr In the code following paragraph 27 of Sutter's article, 3/16/99
the closing brace of the Stack destructor is on the
wrong line.
2/20/99 mr In the implementation of deleteArray following MEC++ 3/16/99
Item 3, paragraph 11, "delete [] array;" is improperly
indented.
2/20/99 mr In the code following paragraph 13 of MEC++ Item 3, the 3/16/99
indentation of the code inside the for loop is
incorrect.
2/20/99 mr Incorrect indentation of the following near the top of 3/16/99
Item M4:
EquipmentPiece *bestPieces =
new EquipmentPiece[10]; // error! same problem
2/22/99 bm On Unix systems, the first picture in item E17 3/16/99
(I_073A*.GIF) and the last picture in item E43
(I_208A*.GIF) are missing or are not shown.
2/22/99 bm Links preceding and following E19 to E20 give the wrong 3/16/99
Item text. The title of E20 is "Avoid data
members...", not "Differentiate...".
2/22/99 bm Using Item chunking, the text "< NAME="dingp1">" 3/16/99
appears in the footnote at the end of M11. It
shouldn't.
3/ 7/99 mr EC++ Intro, after Para 35. The third comment "Add 3/16/99
trailing null char" has wrapped so "null char" is on
the next line.
3/ 7/99 mr Item E7, after Para 11. "int main()" needs to move 3/16/99
left two spaces.
3/ 7/99 mr Item E8, after Para 6. Space needed in final statement 3/16/99
between "else" and "throw".
3/ 7/99 mr Item E10, after Para 22. Fifth and sixth lines 3/16/99
("static void operator delete...") need to come right
two spaces to line up with the ellipsis on line three.
3/ 7/99 mr Item E13, after Para 2. Delete one space between colon 3/16/99
and "size" in fourth line from the bottom. Delete two
spaces between comma "hBound" in third line from
bottom.
3/ 7/99 mr Item E16, after Para 5. Delete two spaces between 3/16/99
"y(initialValue)" and "{}" on line 12.
3/ 7/99 mr Item E16, after Para 15. Delete a space between colon 3/16/99
and "Base(initialValue)" on line 13.
3/ 7/99 mr Item E17, after Para 7. Delete two spaces between 3/16/99
"data =" and "new" on fifth line from the bottom.
3/ 7/99 mr Item E18, after Para 13. Delete all spaces between 3/16/99
"Array(" and "int" on line 7. Move line 8 right one
space.
3/ 7/99 mr Item E23, after Para 17. Delete three spaces between 3/16/99
"d))" and "{" on line 8. Delete three spaces between
"else" and "{" on line 12.
3/ 7/99 mr Item E26, after Para 9. Move line 7 left two spaces 3/16/99
and delete space between "doIt" and "()".
3/ 7/99 mr Item E29, after Para 17. Move third line left two 3/16/99
spaces.
3/ 7/99 mr Item E29, after Para 19. Move seventh line right one 3/16/99
space.
3/ 7/99 mr Item E30. All the code snippets seem to have extra 3/16/99
blank lines.
3/ 7/99 mr Item E33, after Para 9. Delete all the extra blank 3/16/99
lines and make the align the comments.
3/ 7/99 mr Item E33, after Para 13. More extraneous blank lines. 3/16/99
3/ 7/99 mr Item E34, after Para 29. Move entire declaration for 3/16/99
makePerson right two spaces.
3/ 7/99 mr Item E36, after Para 26. Move ellipsis on line 4 left 3/16/99
two spaces.
3/ 7/99 mr Item E39. In all the for loops the test and increment 3/16/99
lines ("p != allAccounts.end();" and "++p) {"
respectively) need to move left one space.
3/ 7/99 mr Item E39, after Para 31. The ninth line from the 3/16/99
bottom ("dynamic_cast<CheckingAccount*>...") needs to
come right by five spaces to line up with the "e" in
CheckingAccount in the line above.
3/ 7/99 mr Item E39, after Para 33. Delete two spaces between 3/16/99
"else" and "if" on line 12.
3/10/99 mr Item M4, after Para 20. Delete spaces between 3/16/99
"EquipmentPiece(" and "int" on line three. Delete two
spaces between "int" and "UNSPECIFIED" on line seven.
3/10/99 mr Item M5, after Para 17. Delete space between 3/16/99
"operator==(" and "const" on first line. Move next
line one space left to preserve alignment.
3/10/99 mr Item M5, after Para 26. Move line 10 ("private:"), 3/16/99
line 14 ("Array(int lowBound..."), and line 17
(ellipsis) right two spaces.
3/10/99 mr Item M5, after Para 30. Delete space between 3/16/99
"operator==(" and "const" on first line. Move next
line left one space to preserve alignment.
3/10/99 mr Item M6, after Para 5. Move second to last line right 3/16/99
two spaces, deleting two spaces before comment to
preserve comment alignment.
3/10/99 mr Item M7, after Para 3. Move body of function (lines 3/16/99
three and four) right one space to create a two space
indent.
3/10/99 mr Item M7, after Para 11. Indenting is all by one space 3/16/99
instead of two. Lines five ("i < j;") and six
("++i...") need to come right by a further space to
line up with the "int" in the line above.
3/10/99 mr Item M7, after Para 17. First line does not line up 3/16/99
with the other two.
3/10/99 mr Item M9, after Para 9. A mess. Entire try-catch block 3/16/99
and final "delete pa;" need to come right two spaces to
line up with "ALA" on line four. Penultimate brace needs
to come right one space to line up with "while".
3/10/99 mr Item M9, after Para 19. Move lines four and seven left 3/16/99
one space to line up with line five.
3/10/99 mr Item M10, after Para 3. Entire public section of 3/16/99
BookEntry (lines 19-27) need to come right two spaces.
3/10/99 mr Item M10, after Para 5. Move line 12 ("if 3/16/99
(audioClipFileName...") right two spaces to line up
with previous "if". Move following line right four
spaces.
3/10/99 mr Item M10, after Para 11. Move ellipsis right two 3/16/99
spaces.
3/10/99 mr Item M10, after Para 15. Move line 13 ("if 3/16/99
(audioClipFileName...") right two space.
3/10/99 mr Item M10, after Para 19. Move lines nine ("? new...") 3/16/99
and ten (": 0)") right three spaces to line up the "i"
in "imageFileName" above. Do the same sort of thing
for theAudioClip, and repeat for the code after Para
24.
3/10/99 mr Item M13, after Para 3. The first ellipsis (line nine) 3/16/99
needs to come right two spaces.
3/10/99 mr Item M13, after Para 10. Move line four right two 3/16/99
spaces. Move second ellipsis in someFunction (approx
line 30) right two spaces. Move brace on second last
line right two spaces.
3/10/99 mr Item M14, after Para 13. Move line 21 ("void *data;") 3/16/99
left one space and the comment on the same line a left
a further two spaces.
3/10/99 mr Item M26, after Para 5. Move ellipsis right two 3/16/99
spaces. Final brace is missing.
3/10/99 mr Item M26, after Para 6. Move first ellipsis (line 10) 3/16/99
right two spaces.
3/10/99 mr Item M29, after Para 16. Declaration of String is 3/16/99
indented by four spaces instead of two.
3/10/99 mr Item M29, after Para 61. Declarations of 3/16/99
markShareable, isShareable, isShared, refCount and
shareable all need to come right by two spaces.
3/10/99 mr Item M29, after Para 63. Delete two spaces between "{" 3/16/99
and "if" on line 19 (body of removeReference).
3/10/99 mr Item M29, after Para 81. Lines sixth from bottom and 3/16/99
second from bottom ("if (pointee..." and
"pointee->...") need to come right two spaces.
3/10/99 mr Item M29, after Para 103. Move line seventh from 3/16/99
bottom ("return *this;") right two spaces.
3/10/99 mr Item M31, after Para 76. Lines from sixth to third 3/16/99
from bottom (ellipsis to closing brace) need to come
right two spaces.
3/10/99 mr Item M33, after Para 53. Declaration of Window is not 3/16/99
indented. Move lines 3-7 right two spaces. Also move
second to last line ("Window w;") left two spaces.
3/10/99 mr Item M35, after Para 47. Delete two spaces from 3/16/99
between "=" and "find".
The following changes were made between the second and third printings. You need to worry about these changes only if you have a copy of one of the first two printings of the CD:
DATE DATE
REPORTED WHO WHAT FIXED
-------- --- ------------------------------------------------------- --------
3/28/99 rhs In Item and Chapter chunking, the link that precedes 6/ 9/99
and that goes to Item 20 has the incorrect Item title.
3/28/99 rhs In all chunk sizes, the status bar text for the link to 6/ 9/99
Bjarne Stroustrup misspells his name.
3/28/99 rhs In Chapter chunking, the link that precedes Item 50 and 6/ 9/99
that goes to Item 49 is missing the title of the Item.
4/ 6/99 rhs In chapter chunking, the footnotes at the end of the 6/ 9/99
"Techniques" chapter are mixed up. Footnote 9 should
be 11, footnote 10 should be 9, and footnote 11 should
be 10.
4/12/99 sdm The bottom of the "Legal Stuff" page says "First 6/ 9/99
Printing" even for the second printing. To see which
printing you really have, check the last sentence of
P78 of the CD Intro. The first printing ends with
this:
From Legal Stuff through to the Books' Index, his
keen observations led us to improve virtually every
page on the disc.
The second printing ends with this:
I thank them all for the dozens of ways in which they
helped us bolster the quality of the CD
With any luck, the third and subsequent printings will
have the correct printing number at the bottom of the
"Legal Stuff" page.
4/12/99 sdm The search applet fails to know about the two sentences 6/ 9/99
added to the end of P78 of the CD Intro.
4/14/99 wr In the diagram following E29 P12, the '\0' between 6/ 9/99
"Hello" and "World" should be a space (' ').
4/19/99 sdm Searching for "ecppcd" yields a hit with a context 6/ 9/99
summary of "Untitled - para 27". No context summary
should ever say "Untitled".
4/19/99 sw CD Sleeve for the second printing of the CD incorrectly 6/ 9/99
states that it is for the first pressing. This is
fixed for the third printing.
4/30/99 sdm The link to information about network licenses in 6/ 9/99
paragraph 27 of the Legal Stuff page doesn't go to the
correct page. (When we fixed this, we also added a
special email address for queries about network
licensing: networklicense@awl.com.)
5/11/99 rb The wrong character is used for some apostrophes in the 6/ 9/99
file INTRO/INTRO.HTM, and these display as a question
mark under Netscape on some platforms.
5/14/99 ff IE5 incorrectly reports a bug involving an unterminated 6/ 9/99
string constant at line 103 in file EC\NAVBR140.HTM. The
real bug is in IE5, but we modified the CD source to work
around it.
The following changes were made between the third and fourth printings. You need to worry about these changes only if you have a copy of one of the first three printings of the CD:
DATE DATE
REPORTED WHO WHAT FIXED
-------- --- ------------------------------------------------------- --------
4/17/99 sdm Item M27 should contain a link to the 3/21/00
"Comments on Item M27" web page.
7/ 6/99 sdm The image at the top of the Legal Stuff page (using the 3/21/00
middle nav area size) is "dimpled". It shouldn't be.
9/22/99 ck In the images for M27, the text "Programs's" should be 3/21/00
"Program's". This happens in more than one place.
10/ 1/99 ref In the CD Intro P61, it says to bookmark a paragraph by 3/21/00
right-clicking on a ¤ and then selecting the
appropriate browser command. This is not quite correct
for IE. In that browser, one must right-click on the
text associated with the ¤, not the dingbat itself.
10/ 3/99 sdm Near the end of the Introduction, add mention of my 3/21/00
mailing list, which announces each time the on-line
errata list is updated.
11/ 4/99 mp In the code after Reeves, P77, change 3/21/00
return v_[-top_];
to
return v_[--top_];
11/ 4/99 mp In the code after Reeves, P108, change 3/21/00
top_-; // reset state
to
top_--; // reset state
11/ 4/99 mp In Reeves, P132, add a ')' to the end of the paragraph. 3/21/00
The following changes were made between the fourth and fifth printings. You need to worry about these changes only if you have a copy of one of the first four printings of the CD:
DATE DATE
REPORTED WHO WHAT FIXED
-------- --- ------------------------------------------------------- --------
7/ 2/99 sdm The readme.txt file in the CD's root directory should 9/ 7/01
mention that there are two equivalent email addresses
for CD-related mail: ec++cd@awl.com and ecppcd@awl.com.
The latter is provided for mail systems that can't
handle "+" signs in email addresses.
9/ 9/99 sdm The title of the article in Reference 3 of Jack Reeves' 9/ 7/01
article should be an external link to
http://www.bleading-edge.com/Publications/C++Report/
v9605/abstract.htm.
(The referenced article had the title "Exceptions and
Standard C++" when it appeared in print, and this is
the title it's referenced under on the CD.
Unfortunately, the on-line version of that article has
a different title: "Guidelines for Throwing
Exceptions." Don't be fooled. It's the same article.)
1/19/00 ccr Below M29, P111 (Item chunking) the diagram displays 9/ 7/01
"CountHolder" for what should be "Widget."
5/16/00 mpp In M8, P20 (Item chunking), the first two sentences 9/ 7/01
got garbled somehow. They should read as follows:
If we step back from placement new for a moment,
we'll see that the relationship between the new
operator and operator new, though perhaps
terminologically confusing, is conceptually
straightforward. If you want to create an object on
the heap, use the new operator.
7/10/00 sdm In M27, the link to the "Comments on M27" web page 9/ 7/01
should be marked as external.
7/10/00 sdm In M27, the diagram text "Program's" should be right- 9/ 7/01
aligned.
7/10/00 sdm The link to my mailing list's web page in P87 of the 9/ 7/01
CD Intro isn't marked as external.
11/14/00 jsc In E33, P18 (Item chunking), "Items 5 and M8 9/ 7/01
describes" ==> "Items 5 and M8 describe".
3/ 7/01 das Everywhere on the CD, "Dave Smallberg" ==> 9/ 7/01
"David Smallberg"
The following changes have been proposed but have not yet been made:
DATE DATE
REPORTED WHO WHAT FIXED
-------- --- ------------------------------------------------------- --------
11/10/01 sdm Change all URLs and email addresses that mention
awl.com to URLs/email addresses at aristeia.com
because, despite over six years of trying, the web
morons at AW are incapable of maintaining valid URLs
and email addresses.
1/22/02 ds In the magazine article "Counting Objects in C++,"
the comment in the second class definition after P55 is
incorrect: "rest of Widget" ==> "rest of ABCD"
2/ 1/02 am In the MEC++ appendix, "An auto_ptr Implemention," the
out-of-line implementation of the generalized (i.e.,
templatized) copy constructor is missing the part that
declares the template parameter U. The code should look
like this:
template<class T>
template<class U>
inline auto_ptr<T>::auto_ptr(auto_ptr<U>& rhs)
: pointee(rhs.release())
{}
3/12/02 ga In the final comment preceding P12 of M2 (Item
chunking), "hierarch" ==> "hierarchy".
3/12/02 ga In P2 of M4 (Item chunking), there is an extra space in
"( Item 28)".
What follows are interesting comments about the CD, but I don't expect to be able to modify the CD to take these comments into account until (if ever) I produce a second edition.
DATE
REPORTED WHO WHAT
-------- --- ------------------------------------------------------------------
9/18/01 dp Under IE6, image and chunk size choices don't appear in the
navigation area, and lines don't break properly to fit the browser
window. For more information on the CD and IE6, see
the message I posted to my mailing list on the subject. There is
now a program available to edit the CD's files to fix these
problems. Click here to download CDFix.
1/19/02 ecm Under Netscape 6, images are not displayed correctly, and chunk
and image sizes are not indicated in the navigation area. For
more information on the CD and Netscape 6, see
the message I posted to my mailing list on the subject.
Who's who:
jd = Jason Dawson dh = David Holmes mr = Mark Rodgers ch = Chris Hill rmm = Reed Meseck rr = Reid Rowlett bm = Bernd Mohr rhs = Bobby Schmidt wr = William Reyes sw = Sarah Weaver ff = Fred Fluke rb = Ross Brattain ck = Christoph Klawun ref = Bob Flynn mp = Matt Page ccr = Christopher Creutzi mpp = Manish P. Pagey jsc = John Cramton das = David Smallberg dp = Dimitre Piskyulev ecm = Erik C. M. Miller ds = Danny Schwartz am = Ashley Mallia ga = Giulio Agostini
From here you may wish to visit the Amazon Page for the Effective C++ CD.

