Boost logo

Boost :

From: Daniel Frey (d.frey_at_[hidden])
Date: 2003-02-15 20:44:59


On Sat, 15 Feb 2003 19:01:08 +0100, Peter Dimov wrote:

> Daniel Frey wrote:
>> typedef test::remove_pointer< int A::* >::type t1; typedef
>> test::remove_pointer< int A::* const >::type t2; typedef
>> test::remove_pointer< int A::* volatile >::type t3; typedef
>> test::remove_pointer< int A::* const volatile >::type t4;
>>
>> typedef test::add_const< int( int ) >::type t5; typedef
>> test::add_volatile< int( int ) >::type t6; typedef test::add_cv<
>> int( int ) >::type t7;
>
> Why do you expect these to work?

Because add_const< int& > returns int&. I was under the impression that
a) type-traits should compile if possible and b) that in the case of
add_const the input type is returned unmodified if it cannot exist as a
const version. If a user wants to make sure that it actually added a
const, he can use is_const, is_same, etc. to make that sure - without
compile failures. But I may be wrong on this one as I was for all other
cases where I tried to understand the code.

>> typedef char t8[ test::is_convertible< double, int >::value ];
>> typedef char t9[ !test::is_class< int( int ) >::value ]; typedef
>> char t10[ !test::is_enum< int( int ) >::value ];
>
> These should work. If they don't, the implementation is broken. :-)

The first one only gives a warning, is_class and is_enum fail. Can anyone
comfirm this or am I again missing something?

Regards, Daniel


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk