https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64615

--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> ---
The standard is clear that D::D(int) is protected:

"Base-class constructors considered because of a using-declarator are
accessible if they would be accessible when used to construct an object of the
base class; the accessibility of the using-declaration is ignored."

So G++ is correct to give an error on that line.

I'm not sure why D::D() is public though. It seems that it isn't inherited from
B::B() but is implicitly defined by the compiler (and then calls B::B() but
it's OK for D's constructor to call the protected constructor of its base
class).

Reply via email to