This errata.txt file contains updates and changes to the text of the Navigating C++ book. ========================================================================== Page 101 (Chapter 3) The 3D storage map equations are incorrectly described. Here are the correct notations. *(&a[0][0][0] + 10*20*i + 20*j + k); // 3D storage map equation p[i][j][k] = *(p + 10*20*i + 20*j + k); // 3D pointer expression ========================================================================== Page 360 (Chapter 8) The Mpool::grow() member function does not scale properly for objects whose size is greater than 4 bytes. Here is the correct solution. void Mpool::grow(int size) { const int chunk = size * nitem; char *start = ::new char[chunk]; char *end = &start[(nitem - 1)*size]; char *pc; if (nc >= maxc) throw MpoolError("max buffer length exceeded"); chunks[nc++] = reinterpret_cast(start); for (pc = start; pc < end; pc+=size) reinterpret_cast(pc)->next = reinterpret_cast(pc+size); reinterpret_cast(pc)->next = 0; freestore = reinterpret_cast(start); } ========================================================================== Page 443 (Chapter 10) The discussion on constant expression parameters is not correct. In Section 10.8, the second sentence of the third paragraph should read Each Type nameN pair appears anywhere in a template parameter list without a class keyword, and each Type must be an integral built-in type (no class types, pointers, of floating types). ========================================================================== Page 571-572 (Chapter 12) Type_info should be type_info in the following format const type_info & typeid(Type) const type_info & typeid(expression) ========================================================================== Page 657 (Chapter 13) The following comment line is corrected to Rint j(5, 10, 1); // error min > max ==========================================================================