相关疑难解决方法(0)

为什么在 C++20 的这种情况下仍然需要 `typename` 前缀?

根据/sf/answers/4339380251/

C++20 的新特性之一是Down with typename

在 C++17 中,您必须在几乎所有†依赖上下文中提供 typename 关键字以消除类型与值的歧义。但是在 C++20 中,这个规则放宽了很多。在需要类型的所有上下文中, typename 关键字不再是必需的。

template<typename T>
concept IsOK = true;

template<typename T>
requires IsOK<T::U> // error: use ‘typename T::U’
void f()
{}

struct A
{
    using U = int;
};

int main()
{
    f<A>(); 
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,显然,IsOK概念只能接受类型。

为什么 typename 这里需要?

在线演示

c++ standards typename c++-concepts c++20

2
推荐指数
1
解决办法
120
查看次数

标签 统计

c++ ×1

c++-concepts ×1

c++20 ×1

standards ×1

typename ×1