次のコードは、Visual Studio 2103 Express プレビューでコンパイルできません。
template<int N> class TTOuter;
template<>
class TTOuter<1>
{
public:
class inner
{
friend class TTOuter<1>;
private:
inner(int n) : data(n) {;}
int data;
};
private:
inner x;
public:
TTOuter(int n) : x(n) {;} //Fails here
};
エラー: "TTOuter<1>::inner::inner(int n)" にアクセスできません
外側のクラスが特殊なテンプレートでない場合、同様のアクセスは成功します。
class Outer
{
public:
class inner
{
friend class Outer;
private:
inner(int n) : data(n) { ; }
int data;
};
private:
inner x;
public:
Outer(int n) : x(n) { ; }
};
エラーは発生しません。
TTOuter<1> を次のように前方宣言しようとしました。
template<> class TTOuter<1>;
また、友人の宣言を次のように置き換えてみました。
template<int N> friend class TTOuter;
しかし、どちらも機能しません。
洞察をいただければ幸いです。ありがとうございました。