This is the mail archive of the
mailing list for the GCC project.
enable_shared_from_this fails at runtime when inherited privately
- From: Christian Schneider <cschneider at radiodata dot biz>
- To: llvm-dev at lists dot llvm dot org, gcc at gcc dot gnu dot org
- Cc: christian at ch-sc dot de, premmers at radiodata dot biz
- Date: Thu, 29 Aug 2019 11:14:40 +0200
- Subject: enable_shared_from_this fails at runtime when inherited privately
I just discovered, that, when using enable_shared_from_this and
inheriting it privately, this fails at runtime.
I made a small example:
#define prefix std
auto a = prefix::make_shared<foo>();
auto b = a->get_sptr();
This compiles fine, but throws a weak_ptr exception at runtime.
I'm aware, that the implementation requires, that
enable_shared_from_this needs to be publicly inherited, but as a first
time user, I had to find this out the hard way, as documentations (I
use, ie. cppreference.com) don't mention it, probably because it's not a
requirement of the standard.
On the other hand, if you compile the code with additional
-Dprefix=boost (and needed boost stuff installed, of course), it gives a
compiler error (
gcc: 'boost::enable_shared_from_this<foo>' is an inaccessible base of 'foo';
clang: error: cannot cast 'boost::shared_ptr<foo>::element_type' (aka
'foo') to its private base class 'boost::enable_shared_from_this<foo>')
I'm think, it would be helpful, if the std implemantions also would fail
at compile time already, and wanted to ask if this would be
gcc-Version 9.2.0 (Gentoo 9.2.0 p1)
clang version 8.0.1 (tags/RELEASE_801/final) (used with both
libstdc++.so.6 and libc++.so.1 (v8.0.1))