Что касается другой части вопроса. Да, безусловно, стоит отправлять отчеты об ошибках. Соответствие стандарту (или, по крайней мере, дальнейшая диагностика) должно поощряться IMO.

но, после обновления библиотеки до 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?

 aschepler26 сент. 2017 г., 02:19
С другой стороны,using a = class std::vector<int>::vector; законно Если вам нравятся такие странные вещи.

Ответы на вопрос(1)

Решение Вопроса

[Class.qual] / 2:

В поиске, в котором имена функций не игнорируются ивложенное имя спецификатор назначает класс C:

если имя указано после спецификатора вложенного имени,если посмотреть в C, будет введено имя класса C...

вместо этого имя считается именем конструктора класса C.

Что касается другой части вопроса. Да, безусловно, стоит отправлять отчеты об ошибках. Соответствие стандарту (или, по крайней мере, дальнейшая диагностика) должно поощряться IMO.

Ваш ответ на вопрос