次のテスト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 は、私が知っている中で最も標準に準拠したコンパイラの 1 つです。g++ はまた間違っていますか?
(1) これは実際のコードではありません。