C and C++ no longer have any place in basic CS education. Sorry, we are at the point where it's more efficient to generate C than to write it. And since C++ is just generated C with really, really arcane syntax for this compile-time generation, C++ lost its purpose, too. There are more expressive (ie, easier to read) and less error-prone methods for generating C code now. It's finally becoming yesterday's news. The whole reason you see "resurgence" of C is that people are not writing it. They are generating it as an intermediate product. C is just text. And there are better ways to generate that text than the preprocessor or the C++'s template mechanism. C, however, has a major, major, major design flaw -- you can't assign to return values directly. So as a mechanism for expressing algorithms it has a natural inefficiency built into the language. It's not that there is no simple work around for it in C, it's that it needs a work around. It's over.