
In VC9.0 the following code gives the error message: 1>...\boost\tuple\detail\tuple_basic.hpp(419) : error C2259: 'Base' : cannot instantiate abstract class If the Base is not abstract, the code compiles and works as expected. Unfortunately, I'm unable to realise why it tries to instantiate the Base, and how to overcome this issue, so any enlightenment would be greatly appreciated! class Base { public: virtual void close() = 0; }; class Derived : public Base { public: void close() {} }; #include <boost/shared_ptr.hpp> typedef boost::shared_ptr<Base> BasePtr; typedef boost::shared_ptr<BasePtr> BasePtrPtr; #include <boost/lambda/lambda.hpp> #include <boost/lambda/bind.hpp> namespace bl = boost::lambda; BasePtrPtr makeHolder(Base *base) { return BasePtrPtr(new BasePtr(base), bl::bind(&Base::close, **bl::_1)); } int main() { Base *b = new Derived(); makeHolder(b); return 0; }