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.