The Artima Developer Community
Sponsored Link

The C++ Source
A Pause to Reflect: Five Lists of Five, Part II
The Most Important C++ Non-Book Publications...Ever
by Scott Meyers
August 16, 2006


In this article, Scott Meyers shares his picks for the five most important non-book publications in the history of C++, along with why he chose them.

Last week, in the first article in this series, I identified what I consider to be the most important C++ books, but many important publications about C++ didn’t come in book form. There were also articles in journals, magazines, and on the web; doctoral dissertations and conference proceedings; newsgroups postings; blog entries; standardization documents, etc. They’ve all played a role in the propagation of ideas seminal to the advancement of C++. I haven’t read all of them. I haven’t even read most of them. But as somebody whose job it is to follow C++, I can say that I’ve read a lot of them. This week’s list covers my choices for the five most important non-book publications in the history of C++. As I did when putting together my book list, I limited myself to exactly five publications, I included my own work in the set of candidates (though nothing I wrote was important enough to make the list), and I ordered the list entries by date of publication.

This category forced me to wrestle with a difficult question: if publication A contains an idea that has little direct impact on C++, but the author of publication B reads publication A and includes the idea in publication B, and if B then has wide effect, which publication is more important, A (the “inventor”) or B (the “popularizer”)? I chose B, not because this is inherently correct, but because I didn’t want to try to ferret out from the authors of the following publications whether their ideas were derived from other publications.1 Instead, I’m taking a page from the C++ language playbook. As you know, const is shallow in const member functions: pointer data members automatically become const, but what they point to doesn’t. In the following list, the publications I cite are, by definition, important, but I assume that the publications on which they are based (and of which I am ignorant) are unimportant. As in C++ itself, this may not be correct behavior, but it’s easy to implement, and it’s therefore what I do.2

Before proceeding to the list, kindly indulge me in a brief elegy for C++ Report, the most significant serial publication ever dedicated to C++. (If you’re not feeling kindly, just skip to the next paragraph.) During most of its years of publication (1989-2000), C++ Report was the paper-based watering hole for the movers and shakers of the C++ world. (The electronic analogue during that period was initially the Usenet newsgroup comp.lang.c++ and later the newsgroups comp.std.c++ and comp.lang.c++.moderated.) Everybody who was anybody published in C++ Report, including names you’ve almost certainly heard of (e.g., all the authors on my “most important C++ books” list) and many more you may not have (e.g., the authors of some of the articles below, as well as....the list is too long to even start. I know, because I started it, and after a few names, I realized I would either have to include dozens or risk implying that omitted names were less important than included ones. Rather than do that, I’ll list none, but trust me, in its heyday—which was most of its life—C++ Report attracted the best authors in the business: the ones with the most interesting things to say and the greatest ability to say it.) When C++ Report closed shop, many of its columnists moved to C/C++ Users Journal, but that magazine never held the magic for me that C++ Report did, and now that CUJ is gone, there’s nothing left of C++ Report except prattling old codgers like me bemoaning the passage of time.

Okay, I feel better now, so let’s move on to my list of the five most important non- book C++ publications...ever:

This list and the one before it dealt with publications about C++, but C++ itself is about software, so in my next episode in this series, I’ll identify the five most important pieces of C++-related software that have ever been.

Share Your Opinion

Discuss this article in the Articles Forum topic, The Most Important C++ Non-Book Publications...Ever.

End Notes

1. The problem is really worse than that, because of the transitive closure issue (i.e., B got the idea from A, but A got the idea from Z, and Z got the idea from Y...).

2. The reason for const being shallow probably has nothing to do with ease of implementation. Rather, it’s a natural fallout of the usual rules regarding const and pointers. If a pointer p is const, it’s not necessarily the case that *p is. In the case of a const member function, *this is const, but if p is a pointer member of *this, that says nothing about whether *p is also const.

3. There was another, slightly earlier, C++ guidelines book, Thomas Plum’s and Dan Saks’ C++ Programming Guidelines, Plum Hall, 1991, but it never gained a lot of traction. It’s been a long time since I really looked at it, but my recollection, based on a very quick read now, is that it was, um, dull.

4. I was a C++ Report columnist at the time, and I remember thinking that Cargill could just as easily have trained his sights on me, had I chosen to write about exceptions. Watching him methodically—but completely professionally—expose the shortcomings of a colleague’s work was one of the most wrenching things I have ever experienced. I’m sure I’m not the only columnist who from that day forward triple-checked his work before publication.

5. Andrei Alexandrescu, now working on his Ph.D. in Computer Science, has been known to argue that the pattern should be recognized as what it is, a simple example of F-bounded polymorphism, but he has had no luck in getting people to heed this suggestion. This pleases me, because I have a Ph.D. in Computer Science, and I’d never heard of F-bounded polymorphism. “CRTP” is an odd name, but it still strikes me as less intimidating than F-bounded anything.

6. It probably didn’t help that the article implemented a compile-time bubble sort as its first example. I have a pathological aversion to bubble sort. Not only is it almost never the right sort algorithm for the job, it’s almost never even worth considering for the job. But I digress.

7. When this started is not entirely clear. The printed version of Sutter’s September 1997 C++ Report article mentions the basic and strong guarantees without attributing them to Abrahams, but the version of the article he permitted me to include on my 1999 Effective C++ CD does refer to Abrahams. I have enough experience with publishing to know that what got printed by C++ Report is not necessarily the same as what Sutter submitted.


Part I in this series, “The Most Important C++ Books...Ever”:

Programming in C++, Rules and Recommendations by Mats Henricson and Erik Nyquist:

“Exception Handling: A False Sense of Security” by Tom Cargill, C++ Report, November-December 1994:

“Using C++ Template Metaprograms” by Todd Veldhuizen, C++ Report, May 1995:

“Exception-Safety in Generic Components” by David Abrahams:

Scott Meyers is the author of Effective C++, the third edition of which was published in 2005. It is available on at:

Scott Meyers is also the author of More Effective C++, which is available on at:

Scott Meyers is also the author of Effective STL, which is available on at:

Scott Meyers’ home page:

About the Author

Scott Meyers Scott Meyers is one of the world’s foremost authorities on C++; he provides training and consulting services to clients worldwide. He wrote the best-selling Effective C++ series (Effective C++, More Effective C++, and Effective STL), designed the innovative Effective C++ CD, is Consulting Editor for Addison Wesley’s Effective Software Development Series, and serves on the Advisory Board for The C++ Source ( He has a Ph.D in Computer Science from Brown University. His web site is

Sponsored Links

Copyright © 1996-2019 Artima, Inc. All Rights Reserved. - Privacy Policy - Terms of Use