I inserted two examples. Of course, the syntax is immense and some corners had to be cut. However, I will fill any important gap, if someone is kind enough to point it out. The overlapping between classes and structs is solved by just using structs. This is actually the trend in the book "Elements of Programming" by Stepanov and McJones.
Fonts are also not great and will re-type it in Latex with the Microtype package.
As for the omissions, please tell me what is really lacking, I will insert any relevant data.
2.1 function pointer types, pointer-to-member types, pointer-to-member-function types
don't address the volatile keyword
don't address placement new
2.5 see comment to 2.1
missing all bit-wise operations |, &, ^, ~
statements re: when to use static_cast, reinterpret_cast need clarification
missing const_cast
4.3 missing volatile; those aren't the ONLY types; you could pass an int**, int ***, int* const* const*, etc etc etc
you don't talk about the seldom-used comma operator
usage of template function (4.6) is not entirely accurate; it is not always necessary to explicitly specify the types
5.1 is true only if you mention about implicit conversion to bool, since I could also put an integer expression there
5.2 default
5.3, 5.4 see 5.1
5.5 needs clarification of <initialization> and <incrementation> etc, since I can put multiple statements
there separated by commas.
6.2 access specifiers may include the keyword virtual
6.2 it is valid to declare a method pure virtual AND provide an implementation for it. Your syntax implies one or the other
You don't talk about the member access operators .* and ->*
6.6 If you are recommending an object be less-than comparable and equality-comparable, then you should support
all of the operators, <=, >=. But most of your recommendations are not generally true anyway.
explicit needs more description (when to use it)
default arguments to functions, member functions missing
your copy constructor isn't the only copy constructor. See std::auto_ptr for example.
your assignment operator isn't the only assignment operator, either, and in fact, I wouldn't even
recommend that signature (which will change your recommended implementation).
you don't talk about the typename keyword, or about template templates.
try, catch, throw missing
if you're including C++0x, then you need syntax for lambda functors, decltype, and the new
way of declaring functions using -> to indicate return type.
you don't talk about the "using" keyword by itself
you don't talk about creating your own namespace, named and unnamed.
Dereference operator
unions, enums
...
just off the top of my head. I may think of more later.
Several corrections were made thanks to your generous list of corrections. Of course there are still many imperfections, pointed out in comp.lang.c++.moderated and by yourself. I will do the Latex document ASAP, and am *grateful* for your comments.
The language appendix in Stepanov and McJones "Elements" (made also by B. Stroustrup) is a gem of conciseness and rigor. Some inspiration will come from there...
Since part of the criticism was actually fair and to-the-point, a new Guide was written. I spent a lot of time with self-criticism, and clearly it is now more complete than what is already available online.
However, perfect it is not, nor complete. Toward the former goal, please see it at: