This is a special edition of Bjarne Stroustrup's classic C++ text book on the C++ programming language. The third edition was already almost complete as a reference to all relevant aspects of the C++ language and the standard library. The only omissions were the internationalization support and exception safety aspects in the standard library. The book now covers these topics in two additional appendices, which make the classic language reference even more complete than ever.
No other C++ text book we know of explains internationalization. The only other references we know of for information on this type of support in the standard library are Nicolai Josuttis's book on The C++ Standard Library, our book on Standard C++ IOStreams and Locales, and an upcoming title by Dave Schmitt on International Programming for Windows that specifically focuses on Visual C++.
Stroustrup discusses internationalization support in 65 pages, which are enough to explain the locale and facet classes in adequate depth and detail. It is information comparable to the coverage in The C++ Standard Library and International Programming for Windows, but less than you'll find in our Standard C++ IOStreams and Locales. Stroustrup explains class locale and the standard facet classes with all their features and functionality, but does not delve into an in-depth discussion of locales and facets as an extensible framework.
Different from all other discussions of the standard facets, Stroustrup includes a detailed discussion of low-level time operations such as clock(), time(), asctime(), and so on. These C functions are part of the standard C library, which is a part of the standard C++ library, but the low-level time operations are not C++-specific or new. For this reason it is kind of surprising to find them included in a discussion of the C++ internationalization support. Yet it makes sense that Stroustrup includes the low-level C functions, because the C++ time facets are closely related to them.
By and large, the new appendix on locales in Stroustrup's special edition of The C++ Programming Language provides enough information for understanding and using C++ locales and standard facets.
On the topic of exception safety in the standard library, this book offers the best coverage we've seen so far. Neither Nicolai Josuttis's book nor Matthew Austern's Generic Programming and the STL, which is one of the best books on the STL, provide any substantial discussion of the topic.
Stroustrup explains exception safety issues, including the different levels of safety guarantees given the standard library operations, in 34 pages. He discusses the safety problems associated with using a sample implementation of the vector container. This discussion articulates the container-operation guarantees, and it is also an instructive demonstration of programming in the presence of exceptions. Programmers can derive conclusions for their own programming practice from it. Stroustrup provides a nice summary of the container-operation guarantees in a well-organized table and does not forget to discuss exception safety issues in other components of the standard library, such as strings, streams, and algorithms.
In sum, The C++ Programming Language, Special Edition offers the best coverage of exception safety issues in the standard library today.
Angelika Langer develops and teaches classes on advanced C++, STL, multithreading, internationalization, and Java. She served on the ANSI/ISO C++ Committee from 1993 to 1998. Klaus Kreft is a software architect and consultant with 15+ years of experience in industrial software development. He works for Siemens Business Services in Germany. Langer and Kreft are authors of "Standard C++ IOStreams and Locales: Advanced Programmer's Guide and Reference" (Addison-Wesley, 1999) and are columnists for C++ Report magazine. Reach them at langer@camelot.de.