【问题标题】:Limit of nested template declarations in C++C++ 中嵌套模板声明的限制
【发布时间】:2019-10-14 16:24:51
【问题描述】:

C++ 标准有很多限制,例如函数参数的最大数量、标识符的最大长度或嵌套范围的最大数量。

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

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

我从某人那里听说只有两个 (template &lt;template &lt;typename T&gt; class&gt;),但事实并非如此(至少在最新版本的 MSVC 编译器中不是这样)。

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

【问题讨论】:

    标签: c++ templates language-lawyer higher-kinded-types


    【解决方案1】:

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

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

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

    附件 B(资料性) 实施数量 [implimits]

    1. 由于计算机是有限的,C++ 实现不可避免地受限于它们可以成功处理的程序的大小。每个实施都应在已知的情况下记录这些限制。本文档可能会引用存在的固定限制,说明如何根据可用资源计算可变限制,或者说固定限制不存在或未知。

    2. 这些限制可能会限制数量,包括以下描述的数量或其他数量。建议将每个数量后面的括号中的数字作为该数量的最小值。但是,这些数量仅供参考,并不能确定合规性。

    强调我的

    说清楚。

    【讨论】:

      猜你喜欢
      • 2015-07-29
      • 1970-01-01
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多