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.

¿La implementación de std::invocable de GCC es incorrecta o aún está incompleta?

Intenté usar std::is_invocable en el siguiente fragmento de código disponible en godbolt.

#include <type_traits>

struct A {
  void operator()(int);
};

struct B {
  void operator()(int, int);
};

struct C : A, B {};

int main()
{
  static_assert(std::is_invocable<a, int="">() == true);
  static_assert(std::is_invocable<b, int="">() == false);
  static_assert(std::is_invocable<c, int="">() == true);
}

Clang puede resolverlo todo, pero GCC parece tener problemas con esta línea:

static_assert(std::is_invocable<c, int="">() == true);

C tiene operadores de llamada a función heredados.

¿Entonces la implementación de GCC es incorrecta o aún está en progreso?</c,></c,></b,></a,>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que este fragmento de código es válido según el estándar C++17, ya que C++17 introdujo el concepto de “constructores heredados” y “operadores de llamada a funciones heredados”. Por lo tanto, tanto Clang como GCC deberían poder manejarlo correctamente.

    Sin embargo, es posible que pueda haber algunos problemas de implementación con ciertos compiladores, como el que parece haber encontrado con GCC. En ese caso, podría valer la pena verificar si hay alguna actualización o parche disponible para el compilador, o si hay una solución alternativa que se pueda utilizar para evitar el problema.

Comments are closed.