类型约束的立即声明的约束表达式是如何组合的?

How are the immediately-declared constraint-expressions of type-constraints combined?

提问人:Jan Schultke 提问时间:9/27/2023 最后编辑:Jan Schultke 更新时间:9/30/2023 访问量:98

问:

如果是一个概念,那么以下结构是否等价?C

template <C A, C B>
template <typename A, typename B>
requires C<A> && C<B>

换句话说,所有立即声明的约束表达式是否都与通过连词()组合的类型约束相关联?&&

我找不到任何措辞来证实这一点。 请注意,这种细微差别非常重要,因为如果使用连词,则带有 and 参数的模板将比另一个具有 only 或约束的模板受到更多限制。如果没有连词,那么两者都不比另一个受到更多的约束。C AC BC<A><B>

C++ 模板 语言律师 +-概念 C +23

评论

2赞 ildjarn 9/27/2023
eel.is/c++draft/temp.constr#decl-3.3
0赞 Jan Schultke 9/27/2023
@ildjarn是的,这回答了这个问题。

答:

1赞 user17732522 9/30/2023 #1

是的,它们按指定的顺序组合在一起以形成关联的约束,其中包括模板参数列表中引入的类型约束,按其外观顺序排列 [temp.constr.decl]/3.3.1

因此,在两个声明中,关联的约束是相同的:C<A> && C<B>