3

このページによると: http://womble.decadent.org.uk/c++/template-faq.html#non-dependent "非依存名は、テンプレート パラメーターに依存しないと見なされる名前と、名前テンプレート自体とその中で宣言された名前 (メンバー、フレンド、およびローカル変数) の

これは、次のコードが有効であると見なされているという事実によって裏付けられているようです (LLVM/Comeau による)。

template<typename T>
struct Template
{
    typedef int I;
    typedef Template::I Type; // 'Template' is NOT dependent
    typedef Template<T>::I Type2; // 'Template<T>' is NOT dependent
    Template<T>* m;
    void f()
    {
        m->f(); // 'm' is NOT dependent
    }
};

C++ 98 標準をしばらく読んだ後、この動作が指定されている場所を見つけることができません。これについては、「temp.nondep」の下で言及されると思います。

4

1 に答える 1

1

C++98 標準では、「非依存」、「非依存」、または「非依存」の名前が正確に何を意味するかを定義していません (3 つの形式はすべて標準テキストで見つけることができます)。

代わりに、14.6 [temp.res] とそのサブチャプターのテンプレート引数に依存する名前と型を定義することを選択します。単純な論理が適用されます...従属とは言われていないものはすべて非従属です。14.6.3 [temp.nondep] を読むだけでは役に立ちません。

于 2012-09-22T13:57:21.870 に答える