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

Limit of nested template declarations in C++

本文关键字:声明 嵌套 C++      更新时间:2023-10-16

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

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

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

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

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

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

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

其中 1024 是建议的最小参数数。 不过,这只是一个建议,第1段和第2段:

附件B(资料性( 实施数量 [限制]

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

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

强调我的

说清楚。