Scott Meyers

Modification History and Errata List for Effective C++ CD

Last Updated June 26, 2008
by Scott Meyers

[Click here for information on the Effective C++ CD and version 6 browsers from Microsoft and Netscape.]

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:

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.