https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67395
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |accepts-invalid, | |rejects-valid Status|UNCONFIRMED |NEW Last reconfirmed| |2015-12-28 Ever confirmed|0 |1 --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- I think it is choosing the wrong v. Here is a testcase which shows why: #include <iostream> using namespace std; class a { protected: int v{0}; }; class b : public a { }; class c : private a { }; class d : public c, public b { public: d() { cout << b::a::v << "\n"; } }; int main() { d testcase{}; } --- CUT --- Here I qualify which a I am talking about but GCC still says: t99.cc: In constructor ‘d::d()’: t99.cc:13:17: error: ‘a’ is an ambiguous base of ‘d’ cout << b::a::v << "\n"; ^ Confirmed.