Inyección de nombre de clase y constructores
Recientemente, al actualizar una biblioteca a Clang 5.x, noté un error en mi código que se había compilado previamente en Clang 4.x, GCC 5.x-6.xy MSVC 2015 y 2017.
#include <iostream>
#include <typeinfo>
#include <vector>
int main()
{
using a = typename std::vector<int>::vector;
std::cout << typeid(a).name() << std::endl;
return 0;
}
Clang-5.x produce el siguiente mensaje de advertencia, mientras que todos los demás compiladores compilan en silencio el código anterior:
a.cpp:7:42: warning: ISO C++ specifies that qualified reference to 'vector' is a
constructor name rather than a type in this context, despite preceding
'typename' keyword [-Winjected-class-name]
using a = typename std::vector<int>::vector;
¿Qué compilador tiene errores? ¿Estoy en lo cierto al suponer que Clang5.x tiene el comportamiento correcto aquí, y todos los demás compiladores (y versiones) son incorrectos? Si es así, ¿vale la pena enviar informes de errores a MSVC y GCC?