Boost logo

Boost :

From: Rani Sharoni (rani_sharoni_at_[hidden])
Date: 2004-01-11 09:18:49

Consider the following:
#include "boost/shared_ptr.hpp"

struct B {};
struct D : B {};

void f(boost::shared_ptr<B>); // #1
void f(boost::shared_ptr<int>); // #2

int main()
    boost::shared_ptr<D> dp(new D);
    f(dp); // #3 ambiguous call to overloaded function

#3 yield ambiguity since #1 and #2 have the same UDC rank using converting
constructor regardless of further constraints (i.e. D* is convertible to
This problem is common to classes that has generalized copy/converting
constructor and can be avoided using extra default parameter and SFINAE. I
vaguely remember that I saw this technique in the new iterator adapter.


Boost list run by bdawes at, gregod at, cpdaniel at, john at