David B. Held wrote:

[...]

> and then just store Base*, but this requires explicit run-time
> checking of types which would otherwise be automatic with pointers to
> T instead of optional<T>.  If this is the only solution, so be it;
> but any clever alternatives are welcome.

This example is not objective at all, but I think it would be possible to
add a convertion operator which will decide if the cast is acceptable or
not.  It is not meant for pointers, but reference types:

struct A
{
    virtual ~A() {}
};

struct B : A
{
};

struct C
{
};

template <typename T>
    struct optional
    {
        template <typename U>
            operator optional<U> const () const
            {
                return * reinterpret_cast<optional<U> const *>(static_cast<U
const *>(reinterpret_cast<T const *>(storage_)));
            }

    ...
    };

void foo(optional<A> const &)
{
}

int main()
{
    optional<B> b;
    optional<C> c;

    foo(b);
    //foo(c);
}



Philippe A. Bouchard




_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to