相关疑难解决方法(0)

为什么我不需要在 C++20 中的依赖类型之前指定“typename”?

这段代码在 C++20(使用 gcc 10.1)中编译,typename在依赖类型之前没有使用关键字std::vector<T>::iterator。为什么要编译?

#include <vector>

template<typename T>
std::vector<T>::iterator // Why does this not require "typename" before it?
f() { return {}; }

int main() {
    auto fptr = &f<int>;
}
Run Code Online (Sandbox Code Playgroud)

代码游乐场

c++ templates typename language-lawyer c++20

70
推荐指数
2
解决办法
3656
查看次数

什么时候需要"typename"关键字?

可能重复:
正式,什么是typename?
我必须在哪里以及为什么要放置模板和typename关键字?

考虑以下代码:

template<class K>
class C {
    struct P {};
    vector<P> vec;
    void f();
};

template<class K> void C<K>::f() {
    typename vector<P>::iterator p = vec.begin();
}
Run Code Online (Sandbox Code Playgroud)

为什么此示例中需要"typename"关键字?是否还有其他必须指定"typename"的情况?

c++ syntax templates typename

50
推荐指数
3
解决办法
3万
查看次数

标签 统计

c++ ×2

templates ×2

typename ×2

c++20 ×1

language-lawyer ×1

syntax ×1