https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79503
Bug ID: 79503 Summary: [new inheriting ctors] spurious bad candidate from same or derived type Product: gcc Version: 7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: lucdanton at free dot fr Target Milestone: --- My understanding of the new inheriting constructor rules is a bit shaky so I may be off here. The testcase: //-------------------- struct payload {}; struct base: private payload { base(payload) {} }; struct derived: base { using base::base; }; int main() { payload data; // error: no matching function for call to 'derived::derived(payload&)' // note: candidate: base::base(payload) // note: an inherited constructor is not a candidate for initialization from an expression of the same or derived type derived demo(data); } //-------------------- Compilation fails on recent trunk with e.g.: g++-trunk -std=c++14 main.cpp but succeeds with -fno-new-inheriting-ctors. A hint that something is wrong is that there is no error if base derives from some other class than payload. At the very least the last note is misleading: all inherited candidates are from base whereas the expression has type payload which is neither the same nor derived from it.