Sobrecarga de una función miembro principal sin un calificador de referencia con una función miembro secundaria con un calificador de referencia en C++
En C ++, no se puede sobrecargar en una clase una función miembro con ref-qualifier con una función miembro sin ref-qualifier. Pero al mismo tiempo, es posible heredar una función miembro de una clase padre y sobrecargarla en una clase hija como en el ejemplo:
struct A {
void f() {}
//void f() & {} //error de sobrecarga en todas partes
};
struct B: A {
usando A :: f;
void f() & {} //ok en todas partes
};
int main() {
B b;
b.f(); //ok solo en GCC
}
Solo durante la invocación de f, Clang se queja de que la llamada a la función miembro ‘f’ es ambigua. Pero GCC acepta el programa sin ningún error, demo: https://gcc.godbolt.org/z/5zzbWcs97
¿Qué compilador es correcto aquí?
davy.ai
Es difícil decir qué compilador es el correcto en este caso. Según el estándar de C++, la llamada a
f
debería ser ambigua, ya que las dos funciones tienen el mismo nombre y parámetros. Sin embargo, parece que GCC está permitiendo la llamada af
sin errores.