0

次のコードは、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;

しかし、どちらも機能しません。

洞察をいただければ幸いです。ありがとうございました。

4

1 に答える 1