![](/img/trans.png)
[英]C++20 Concepts: Difference in the behavior of the compound requirement expression with a pointer-type member in GCC and Clang
[英]Type requirement in C++ concepts (C++20)
我正在使用 g++ 10 学习新实现的 C++20 标准概念。我坚持一个简单的类型要求。 即我想实现模板参数T
具有T::inner
成员名称的要求。 这是我的错误代码。 这个简单的代码有什么问题以及如何修复它?
#include<concepts>
template<typename T>
concept ContainsInner = requires
{
typename T::inner;
};
template<ContainsInner T>
struct S{};
struct Q
{
int inner;
};
int main()
{
S<Q> s; // instantiate S with Q for template type,
// which must satisfy the ContainsInner concept.
// Q indeed contains the inner name but still the compilation fails
}
这个:
template<typename T>
concept ContainsInner = requires
{
typename T::inner;
};
要求T
有一个名为inner
的类型。 gcc 在其错误中告诉您:
source>:6:12: note: the required type 'typename T::inner' is invalid
6 | typename T::inner;
| ~~~~~~~~~^~~~~~~~~
Q
没有名为inner
的类型。 如果你想要的是有一个名为inner
的成员变量,那么你想要:
template<typename T>
concept ContainsInner = requires(T t) {
t.inner;
};
请注意,这甚至不检查它是什么类型,只是检查它是否存在。 这不是很有用。 也许你想要求它是一个int
:
template<typename T>
concept ContainsInner = requires(T t) {
{ t.inner } -> std::same_as<int&>;
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.