template struct A { A& operator=(const A&) {return *this; } }; template struct B : A { B(const A& a) : A(a) {} B& operator=(const B& b) {A::operator=(b); return *this; } }; int main() { return 0; } // The code is compiled correctly if I replace line 10 with // B(const A& a) : A(a) {}