Boost logo

Boost :

From: Vladimir Prus (ghost_at_[hidden])
Date: 2005-02-17 07:20:15


Alexander Nasonov wrote:

> Stefan Slapeta wrote:
>> I'm very in favor of this. It has been proposed multiple times and
>> Kevlin once told me he is going to extend any_cast this way, but it
>> seems he is too busy.
>
> Reviewing a small patch usually takes less time then writing it. Has
> anybody with a patch contacted him?
> If not, I can do this. Here's the patch:
> http://lists.boost.org/MailArchives/boost/msg76565.php

Given that overall reaction is positive, I'll make the change, starting with
the 'cast to reference' logic I wanted in the first place.

The only difference between my version and the one you mention above is this
snippet in 'any_cast':

#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
        // Please use BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION macro
        // to generate specialization of remove_reference for your class
        // See type traits library documentation for details
        BOOST_STATIC_ASSERT(!::boost::is_reference<nonref>::value);
#endif

It looks to me that this assert will always be triggered when your pass
reference type and BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION is defined,
right? The assert will fire even if used has specialized remove_reference,
no? If that's true, the comment is not correct and casting to reference is
just not supported for broken compilers.

I see that your patch also:
1. Strips cv-qualification in constructor (which is reasonable).
2. Strips cv-qualification when casting to pointer.

Why the second aspect is needed?

- Volodya


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