C ++中嵌套模板声明的限制

问题描述 投票:4回答:1

C ++标准强加了许多限制,例如最大数量的函数参数,最大标识符长度或最大嵌套范围。

我很好奇的是最大嵌套模板声明的限制(或缺少它),例如:

template <template <template < template <template < ...

我听说有人只是两个(template <template <typename T> class>),但事实并非如此(至少不是最新版本的MSVC编译器)。

我很感兴趣,实际上是否有限制,如果有限制,它的价值是什么,以及它在C ++标准的不同版本之间如何变化。

c++ templates language-lawyer higher-kinded-types
1个回答
5
投票

标准没有施加任何价值。这是实现定义的值,将由您的编译器记录。我可以在标准中找到的唯一直接限制,因为[temp.arg.template]中没有任何内容,而[implimits]中则是[>]

  • 模板声明([temp.param])中的模板参数[1 024]。

其中1024是建议的最小参数数量。不过,这只是一个建议,paragraphs 1 and 2

附件B(资料性的)执行数量[限制]

  1. 因为计算机是有限的,所以C ++实现不可避免地受到它们可以成功处理的程序大小的限制。每个实现应在已知的地方记录这些限制。该文档可能会引用存在的固定限制,例如如何根据可用资源来计算可变限制,或者说固定限制不存在或未知。

  2. 这些限制可能会限制包括以下内容或其他内容的数量。建议将每个数量后面的方括号内的数字作为该数量的最小值。但是,这些数量仅是指导原则,并不能确定合规性。

重点矿

说清楚。

© www.soinside.com 2019 - 2024. All rights reserved.