c++ - C++ 98 标准在哪里指定本地声明的模板名称不依赖?

标签 c++ templates name-lookup dependent-name c++98

根据这个页面: http://womble.decadent.org.uk/c++/template-faq.html#non-dependent “非依赖名称是那些被认为不依赖于模板参数的名称,加上模板本身的名称和在其中声明的名称(成员、 friend 和局部变量)”

这似乎得到以下代码被认为有效的事实的支持(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”下找到对此的提及。

最佳答案

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

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

关于c++ - C++ 98 标准在哪里指定本地声明的模板名称不依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12543939/

相关文章:

C++ STL 无法找到嵌套类的比较器

c++ - 使命名空间内联时使用 using 指令进行限定名称查找的不同行为

c++ - 异常代码 C++ 中的泄漏

c++ - 与带有指针项的 vector 拷贝相关的问题

c++ - 防止在 _popen 上打开命令行

c++ - 类模板实例化中的类型转换

c++ - 使用模板查找最大值

c++ - 是否有替换 X-macros 的模板/constexpr/C++11 方法?

c++ - 为什么我不能从函数返回 Boost::Scoped_ptr?

c++ - 将 'typedef' 从基类传播到 'template' 的派生类