requires-clause出现在template模板参数之后:这是合法的语法吗?
Requires-clause appears after template template parameter: is this legal grammar?
最近意外发现gcc和msvc接受如下代码(注意template-list中的requires-clause):
#include <vector>
template <template <class> requires true class>
void f() {}
int main() {
f<std::vector>();
}
并且 clang rejects 其语法为:
<source>:3:28: error: template template parameter requires 'class' after the parameter list
template <template <class> requires true class>
^
我应该信任哪个编译器?此代码在语法上是否有效?
是的,这似乎是合法的语法。模板以 template-head 开头,即
template
<
template-parameter-list >
requires-clause opt
那么一个template-parameter-list就可以
template-parameter
其中 template-parameter 可以是
type-parameter
然后type-parameter可以
template-head type-parameter-key ...
opt identifieropt
现在这包括 template-head,它允许 requires-clause 如上所述。
最近意外发现gcc和msvc接受如下代码(注意template-list中的requires-clause):
#include <vector>
template <template <class> requires true class>
void f() {}
int main() {
f<std::vector>();
}
并且 clang rejects 其语法为:
<source>:3:28: error: template template parameter requires 'class' after the parameter list
template <template <class> requires true class>
^
我应该信任哪个编译器?此代码在语法上是否有效?
是的,这似乎是合法的语法。模板以 template-head 开头,即
template
<
template-parameter-list>
requires-clause opt
那么一个template-parameter-list就可以
template-parameter
其中 template-parameter 可以是
type-parameter
然后type-parameter可以
template-head type-parameter-key
...
opt identifieropt
现在这包括 template-head,它允许 requires-clause 如上所述。