Requires-clause出现在模板模板参数之后:这是合法的语法吗?

最近意外发现gcc和msvc接受如下代码(注意template-list中的requires-clause):

#include <vector>

template <template <class> requires true class>
void f() {}

int main() {
  f<std::vector>();
}

和 clang拒绝它的语法:

<source>:3:28: error: template template parameter requires 'class' after the parameter list
template <template <class> requires true class>
                           ^

我应该信任哪个编译器?这段代码在语法上有效吗?

回答

是的,这似乎是法律语法。模板以模板头开始,它是

template < 模板参数列表 > 需要子句 选择

那么模板参数列表可以是

模板参数

其中模板参数可以是

类型参数

然后类型参数可以是

模板头 类型参数键 ...选择 标识符选择

现在这包括模板头,它允许如上所述的要求子句


以上是Requires-clause出现在模板模板参数之后:这是合法的语法吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>