Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2003-08-30 07:05:27

Brian McNamara <lorgon_at_[hidden]> writes:

> On Thu, Aug 28, 2003 at 03:05:19PM -0400, David Abrahams wrote:
>> Douglas Gregor <gregod_at_[hidden]> writes:
>> > On Thursday 28 August 2003 01:23 pm, David Abrahams wrote:
>> >> The other possible option would have been to simply not give the user
>> >> a readable error message. I'm open to opinions that I chose the
>> >> wrong balance.
>> >
>> > So we're breaking code in order to produce a better error message? This seems
>> > like the wrong trade-off to make, especially because it means it breaks code
>> > when users upgrade from VC6 to VC7; but we want them to upgrade!
>> Anyone got a brilliant way to cause vc7 to print the error message?
> More generally, is there a generally accepted strategy for Boost
> libraries to attempt to force compilers to emit useful diagnostics?
> I can imagine there are a number of places where this goes on, and so if
> anyone has good domain knowledge about coercing compiliers into emitting
> useful diagnotics, it'd be great to have that written down somewhere (or
> maybe even turned into some macros possibly).
> (Kinda a vague idea-specification, I know.)

Unfortunately, typedef substitution makes it nearly impossible on some
compilers, namely EDGs and MSVC7.x:

           template <class T>
           struct X
                typedef int& type;

           template <class U>
           struct Y
                typedef U* type;

           template <class T>
           struct composeYX
              : Y<typename X<T>::type> {};

           typedef composeYX<char>::type z;

Nowhere in that message will you see "int&" on compilers which do
typedef substitution :(

Dave Abrahams
Boost Consulting

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