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<TestA> 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> TestA::CreateTestA() { return std::shared_ptr<TestA>( new TestA(), TestA::Deleter() ); } will not compile: error: ‘TestA::~TestA()’ is private The boost shared_ptr works OK.