Определенные ошибки в необработанном шаблоне не сообщаются g ++
Рассмотрим этот пример:
class A
{
void foo();
public:
void bar();
};
template <class> class B
{
B()
{
A a;
a.foo(); // 1
A::bar(); // 2
a.bar(1); // 3
}
};
ЗаметкаB
никогда не создается.
clang++
сообщает все три отмеченные строки как ошибочные.g++
(4.8.3) принимает строки1
а также2
и только строка отчета3
.
ЕслиB
инстанцируется,g++
счастливо сообщает все три строки как ошибочные.
Этоg++
ошибка? Казалось бы, так.A
не является зависимым именем, и его члены должны проверяться обычно во время определения шаблона. Есть ли нюансы, которых я не вижу?