Boost logo

Boost :

From: Howard Hinnant (hinnant_at_[hidden])
Date: 2005-05-28 08:46:33

On May 28, 2005, at 6:37 AM, John Maddock wrote:

>> I am getting the error from Intel C++ at the point of declaration of
>> the compressed_pair specialization.
> I've experimented some more, and found one bug in the current
> implementation:
> If one of the templates arguments is both const and an empty class,
> then compressed_pair attempts to inherit from the const-class type
> which generates an error for Intel C++, but not strangely for VC++.

Interesting. I'm not seeing that problem here (on CW) either.

> BTW, at the risk of stating the obvious, compiler error messages
> really help when reporting issues (JM runs and ducks for cover!).

Umm... yeah! And what was the error on Intel with the const empty
type? ;-)

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

Subject: Can a base-specifier name a cv-qualified class type?

Ah, perfect.

> The resolution of issue 298 added new text to 9.1
> 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! :-)


Boost list run by bdawes at, gregod at, cpdaniel at, john at