https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105637
Bug ID: 105637 Summary: [11 Regression] Wrong overload selected in base class Product: gcc Version: 11.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: ted at lyncon dot se Target Milestone: --- This compiles fine in 11.3 but selects the non-const `BaseClass` overload in 12.1: ``` struct BaseClass { // Commenting out this non-const function out will fix the compilation: int baseDevice() { return 1; } int baseDevice() const { return 2; } }; template <class ObjectClass> struct DerivedClass : BaseClass {}; template <class ObjectClass> struct TopClass : DerivedClass<ObjectClass> { public: virtual int failsToCompile() const { // This should choose to call the const function, but it tries to call // the non-const version. return BaseClass::baseDevice(); // error! //return this->baseDevice(); // works //return DerivedClass<ObjectClass>::baseDevice(); // works } }; int main() { TopClass<int> x; } ```