Недавно, после обновления библиотеки Clang 5.x, я заметил ошибку в моем коде, который был скомпилирован ранее на Clang 4.x, GCC 5.x-6.x и MSVC 2015 и 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 выдает следующее предупреждающее сообщение, а все остальные компиляторы молча компилируют вышеуказанный код:
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;
Какой компилятор неисправен? Правильно ли я полагаю, что Clang5.x имеет здесь правильное поведение, а все другие компиляторы (и версии) неверны. Если да, то стоит ли отправлять отчеты об ошибках в MSVC и GCC?