Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;98标准指定本地声明的模板名称不依赖?_C++_Templates_Name Lookup_Dependent Name_C++98 - Fatal编程技术网

C++ C++;98标准指定本地声明的模板名称不依赖?

C++ C++;98标准指定本地声明的模板名称不依赖?,c++,templates,name-lookup,dependent-name,c++98,C++,Templates,Name Lookup,Dependent Name,C++98,根据本页: 非依赖名称是那些被认为不依赖于模板参数的名称,加上模板本身的名称和其中声明的名称(成员、朋友和局部变量) 以下代码被认为是有效的(由LLVM/Comeau)事实证明了这一点 模板 结构模板 { 类型定义int I; typedef模板::I Type;//“模板”不依赖 typedef模板::I Type2;//“模板”不依赖 模板*m; void f() { m->f();/“m”不依赖于 } }; 在花了一些时间阅读C++ 98标准之后,我找不到这个行为的指定位置。我希望在“t

根据本页: 非依赖名称是那些被认为不依赖于模板参数的名称,加上模板本身的名称和其中声明的名称(成员、朋友和局部变量)

以下代码被认为是有效的(由LLVM/Comeau)事实证明了这一点

模板
结构模板
{
类型定义int I;
typedef模板::I Type;//“模板”不依赖
typedef模板::I Type2;//“模板”不依赖
模板*m;
void f()
{
m->f();/“m”不依赖于
}
};

在花了一些时间阅读C++ 98标准之后,我找不到这个行为的指定位置。我希望在“temp.nondep”一词中会提到这一点。

C++98标准没有定义“非依赖”、“非依赖”或“非依赖”名称的确切含义(您可以在标准文本中找到所有三种形式)


相反,它选择定义哪些名称和类型依赖于14.6[temp.res]及其子章节中的模板参数。简单的逻辑应用。。。一切不被称为依赖的东西都是不依赖的。只有阅读14.6.3[temp.nondep]没有帮助。

14.6[temp.res]的重读回答了我的问题:在模板定义中可以使用三种名称:-模板本身的名称和在模板本身中声明的名称-依赖于模板参数的名称-模板定义中可见的范围中的名称。“这意味着模板的名称被排除在“依赖于模板参数的名称”集合之外。@willj是的,你确实比我更清楚地回答了你自己的问题。:)注意,自从C++11以来,现在有一系列语言涉及到“一个名称指的是当前的实例化if”这类用法。
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
    }
};