以下不编译:
class Foo {
public:
Foo( boost::shared_ptr< Bar > arg );
};
// in test-case
boost::shared_ptr< Bar > bar;
BOOST_CHECK_THROW( Foo( bar ), std::logic_error ); // compiler error here
Bar 的实现无关紧要。编译器抱怨说 Foo 没有适当的默认构造函数(VC++ 2005)。如果我添加一个默认构造函数,它会起作用,并且实际上会被调用。为什么这个语句需要一个默认构造函数?