|
Boost : |
From: David Abrahams (dave_at_[hidden])
Date: 2003-11-21 20:25:51
Christopher Currie <christopher_at_[hidden]> writes:
> David Abrahams wrote:
>>>struct unspecified {};
>>>
>>>template<class R> class bind_t { };
>>>
>>>template<class R, class F>
>>> bind_t<R>
>>> bind(F f);
>>>
>>>template<class F>
>>> bind_t<unspecified>
>>> bind(F f);
>>>
>>>template<class R, class T>
>>> bind_t<R const &>
>>> bind(R T::* pm)
>>>{
>>> return bind_t<R const &>();
>>>}
>>>
>>>struct X { int i; };
>>>
>>>int main() { bind(&X::i); }
>>>
>>>
>>>The Sun compiler is selecting the first partial specialization over
>>>the second. If I comment out the first specialization, the code
>>>compiles fine, but for some reason it thinks the first is a better
>>>match, so it won't link.
>> These are overloads, not partial specializations, but anyway...
>
> Right, I forget that you can't specialize functions.
You can, just not partially.
>> what happens if you reverse their order?
>
> The code seems to compile and link fine if the order is reversed. Is
> this a reasonable workaround for Sun?
"whatever works, man"
> The order shouldn't matter on other compilers, if it's just a
> function overload, although given the large number of bind
> overloads, it could take some time to find the order that works on
> Sun for all cases.
If any such order exists ;-)
-- Dave Abrahams Boost Consulting www.boost-consulting.com
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk