Injeção de nome de classe e construtores
Recentemente, ao atualizar uma biblioteca para o Clang 5.x, notei um erro no meu código que havia sido compilado anteriormente no Clang 4.x, GCC 5.x-6.xe MSVC 2015 e 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 produz a seguinte mensagem de aviso, enquanto todos os outros compiladores silenciosamente compilam o código acima:
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;
Qual compilador é buggy? Estou correto ao assumir que o Clang5.x tem o comportamento correto aqui e todos os outros compiladores (e versões) estão incorretos. Em caso afirmativo, vale a pena enviar relatórios de erros para o MSVC e o GCC?