http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46910
Summary: std::shared_ptr requires public destructor for a class
with friend deleter
Product: gcc
Version: 4.5.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: gccbugzi...@virginmedia.com
Created attachment 22726
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=22726
Code example and compiler output
class TestA
{
public:
static std::shared_ptr CreateTestA();
private:
TestA();
~TestA();
private:
class Deleter;
friend class Deleter;
};
class TestA::Deleter
{
public:
void operator()( TestA * p)
{
std::cout << "Deleting TestA\n";
delete p;
}
};
std::shared_ptr TestA::CreateTestA()
{
return std::shared_ptr(
new TestA(),
TestA::Deleter()
);
}
will not compile:
error: ‘TestA::~TestA()’ is private
The boost shared_ptr works OK.