Linux で GCC 4.8.2 を使用して、ファクトリ メソッド Create() にクラス C のプライベート コンストラクターへのアクセスを許可したいのですが、特殊なフレンドを宣言しようとすると、「エラー: 'Create' はこのスコープで宣言されていませんでした」というメッセージが表示されます。 . B::Create() のすべての型への宣言を開かずにこれを機能させるにはどうすればよいですか?
template <typename T> class A {
public:
class B;
template <typename U> class C;
};
template <typename T>
class A<T>::B {
public:
template <typename U> static void Create();
};
template <typename T> template <typename U>
class A<T>::C {
C() = default;
friend void B::Create<U>();
};
template <typename T> template <typename U>
void A<T>::B::Create() {
C<U>{};
}
int main() {
A<int>::B::Create<char>();
}