我不明白在嵌套模板中如何使用
下面的代码可以在最新版本的MSVC和gcc上编译(分别使用
在这种情况下,
requires
关键字。下面的代码可以在最新版本的MSVC和gcc上编译(分别使用
/std:c++latest
和-std=c++2a
)。在这种情况下,
requires
是否被简单地丢弃了?我不应该这样使用吗?#include <type_traits>
template <
template < typename >
requires (false) // Should not this stop compilation?
typename Wrapper >
using Test = Wrapper < int >;
template < typename >
struct S
{
};
int main() {
Test < S > var;
return 0;
}
-std=c++20
编译时无法通过,那么你的GCC安装可能并不像你想象的那样最新。 - user4581301requires
-clause 并没有任何问题。但是编译应该失败,因为Wrapper < int >
不满足Wrapper
的约束条件(至少直觉上是这样)。 - user17732522requires(false)
具体来说没有太多意义(甚至可能是 IFNDR,我不知道),但是想象一下它是template < typename T > requires std::same_as<float, T> typename Wrapper
。 - user17732522-std=c++2a
是编译器使用的临时标志,允许您选择C++20的WIP功能(类似于C++23的-std=c++2b
),当可用时,完整功能将通过-std=c++20
激活。查看cppreference的C++20编译器支持页面,似乎只有GCC 10、Clang 10完全支持Concepts,并且仅由MSVC 19.23-19.30部分支持。因此,您正在使用的任何编译器版本可能尚未完全支持概念。 - oraqlle