Boost logo

Boost Users :

Subject: [Boost-users] smart_ptr subclass as template function parameter issues with Sun Studio
From: Maróy Ákos (akos_at_[hidden])
Date: 2009-11-21 06:24:59


Hi,

I have the following problem, when using the Sun Studio C++ compiler and
boost::smart_ptr. Consider the following code:

class A {};
class B : public A {};

template<typename T>
void fn(shared_ptr<A> a, T t) {
}

void foo() {
    shared_ptr<A> a;
    shared_ptr<B> b;

    fn(a, 1);
    fn(b, 1);
}

this compiles fine with a number of compilers, including gcc, icc and MS
Visual Studio. But when I try to compile it using the Sun Studio
compiler, I get:

Error: Could not find a match for fn<T>(boost::shared_ptr<B>, int)
needed in foo().

it only works if I explicitly cast the derived class' shared_ptr to that
of the base class, that is, instead of:

    fn(b, 1);

I need to use:

    fn((shared_ptr<A>) b, 1);

which seems rather inconvenient.

is the fn(b, 1); style really bad? is there a way to make the Sun
compiler accept this form?

Akos


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net