(この回答に基づいて)質問への回答を調査するとき、私は次のことを試みました:
template <class T>
class friendly {
friend class T;
};
friendly<string> howdy;
これは、次のエラーでコンパイルに失敗します:
エラー: テンプレート パラメーター "T" は、複雑な型指定子のフレンド クラス T では使用できません。
親友の Google から理解できることから、これは誤ってインスタンス化を試みないようにするためですがfriendly<int>
、テンプレートをコンパイルするときになぜこれがエラーになるのでしょうか? テンプレートを無効なタイプでインスタンス化するときにエラーになるべきではありませんか(私が書いたようなint f() { return T::foo(); }
)