Определенные ошибки в необработанном шаблоне не сообщаются 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 не является зависимым именем, и его члены должны проверяться обычно во время определения шаблона. Есть ли нюансы, которых я не вижу?

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

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