为什么 C++ 概念不能使用简单的要求来检查嵌套类型是否存在?

问题描述 投票:0回答:1
template <typename T>
concept HasInner = requires { T::inner; };

void foo(HasInner auto x) { return; }
struct Test { using inner = int; };

int main()
{
    foo(Test());
}

为什么这段代码无法编译?

inner_type<T>::type;
不是一个有效的表达式吗?

我知道

concept HasInner = requires { typename T::inner; };
没关系。但我想知道为什么第一个不行。

谢谢!

c++ c++-concepts c++-templates
1个回答
0
投票

这实际上与概念无关,这是一个模板错误,也适用于模板化类和函数。

当您专注于

T
并想要使用
T::something
时,您需要
typename
,因为它是 从属名称

© www.soinside.com 2019 - 2024. All rights reserved.