Comeau vs g ++ [Еще одна ошибка] - PullRequest
5 голосов
/ 16 декабря 2011

Рассмотрим следующий тест 1 код

struct A {
 private:         
     class face;
     friend class face; 
};

struct A::face {};    

template <typename _CharT>
struct C : public A::face
{};

int main()
{
  C<int> x;
}

Правильно ли сформирован этот код?Я проверил это под G ++ и Comeau.g ++ прекрасно скомпилирует, тогда как comeau выдает следующее сообщение об ошибке (которое я считаю правильным)

"ComeauTest.c", line 12: error: class "A::face" (declared at line 9) is inaccessible
      struct C : public A::face
                           ^
          detected during instantiation of class "C<_CharT> [with _CharT=int]"
                    at line 17

Какой компилятор верен в этом случае?Comeau - один из самых стандартных компиляторов, который я знаю.G ++ снова не так?

(1) Это не реальный код.

1 Ответ

6 голосов
/ 16 декабря 2011

Это неверно.face является приватным, поэтому недоступен из C. Это было бы законно, если бы C был подружен с A, а не face.face является приватным участником, поэтому friend это не имеет никакого эффекта.

...