如果我有一个私有构造类,使用boost :: make_shared从该类的成员函数内构造该类的shared_ptr会发出编译器错误使用gcc 4.6。C++ 0x和Friend函数和boost :: make_shared
#include "boost/shared_ptr.hpp"
#include "boost/make_shared.hpp"
class Foo
{
private:
Foo(int a){};
public:
static boost::shared_ptr do_foo(){ return boost::make_shared(5); }
friend template boost::shared_ptr boost::make_shared(Arg1 && arg1, Args && ... args);
}
int main()
{
auto f = Foo::do_foo();
}
对Foo::do_foo
的调用将导致编译器错误。
有什么想法?
被编辑为包含可编译代码。
什么是Arg1和Args? – sellibitze 2010-09-10 08:29:40
@sellibitze可能不应该在那里,但我只是复制粘贴OP的代码。 'make_shared'确实需要可变数量的参数,并将它们传递给目标类型的构造函数。 – kwatford 2010-09-10 14:09:23
我可以发誓,我做到了...... – Raindog 2010-09-10 19:24:06