Boost logo

Boost :

From: Ion Gaztañaga (igaztanaga_at_[hidden])
Date: 2006-06-14 01:02:18


>> * Is this gcc error correct? Revising a bit ADL + template issues (a
>> fairly complicated logic that should be removed from C++, in my
>> opinion) I think that gcc is right.
>
> Questionable. The problem is that for static_pointer_cast<int> to be valid,
> static_pointer_cast must be known to be a template. It is understandable why
> g++ rejects it without a declaration, but I'm not sure whether this is
> conforming now, much less whether it'd be conforming tomorrow if there are
> open core issues for this case.

I think I should post this to c.s.c++ to see if this call should kick
ADL. If so, I will report a bug to the gcc mailing list. Anyway,
static_pointer_cast is not a portable ADL function in Boost. What should
we do? Declare an overload taking an additional dummy parameter to
deduce the return type?

template<class Source, class Target>
smart_ptr<Target> static_pointer_cast
    (const smart_ptr<Source> &s, const Target &);

so that the ADL call is:

Pointer p;

IntPtr ip = static_pointer_cast(p, int());

Meanwhile, I would need to predeclare static_pointer_cast in the
Interprocess/Shmem headers for Interprocess/Shmem smart pointer types to
make the code work in gcc, but static_pointer_cast is broken for ADL in
Boost and that's bad news.

Regards,

Ion


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