es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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í?

Tags:  , , ,

Answer

  1. Avatar for 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 a f sin errores.

Comments are closed.