
Umm... yeah! And what was the error on Intel with the const empty type? ;-)
It was something useful like "Illegal base class".
This is a pretty interesting point. I whipped this test up to explore:
struct Base {};
typedef const Base ConstBase;
struct A : ConstBase { A() {} };
It compiles on CW. But it doesn't on Comeau C++ Online (thanks Greg). Normally when CW and EDG disagree, the decision usually goes to EDG. So I started searching the standard for where it says that cv-qualified classes can't be used as base specifiers so that I could send our compiler team the bug report.
Couldn't find it. So I started digging into the core issues list and found:
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#484
Subject: Can a base-specifier name a cv-qualified class type?
Ah, perfect.
The resolution of issue 298 added new text to 9.1 class.name paragraph 5 making it clear that a typedef that names a cv-qualified class type is a class-name. Because the definition of base-specifier simply refers to class-name, it is already the case that cv-qualified class types are permitted as base-specifiers.
No kidding. And check out the date on that:
Rationale (April, 2005):
Fresh from the Lillehammer presses! :-)
Right, but it's been declared a duplicate of issue 298, which was resolved in April 2003, so it's that remarkable thing, an EDG deviation from the standard. Well researched! John.