При попытке понять выражение "конструкторы не имеют имен" в стандарте С++, похоже, я обнаружил ошибку в clang. Может ли кто-нибудь подтвердить это?
VS2015
и gcc
отклоняет этот код, и я думаю, что they it are верен, По крайней мере, это впечатление, которое я получаю из §12.1 [class.ctor]/2 в N4140:
#include <iostream>
class A {
public:
A() { std::cout << "A()" << '\n'; }
};
int main()
{
A::A();
}
§12.1 [class.ctor]/2 в N4140:
Конструктор используется для инициализации объектов своего типа класса. Потому как конструкторы не имеют имен, они никогда не встречаются во время имени Погляди;...
С выражением A::A();
выше, clang находит конструктор по имени, когда он должен найти имя типа A
. См. живой пример.