模板代码的有效性是什么意思?

时间:2019-05-30 20:23:32

标签: c++ validation templates compilation

每个人都几乎清楚非模板代码的有效性-编译器检查语法,类型和规则。编译器具有执行这些检查所需的一切。

但是,当编译器必须编译模板化代码(例如STL或Boost)时,它没有足够的信息。 虽然未实例化模板代码,但编译器不知道操作的含义,是否为将用于实例化此模板代码的类型定义了操作等。在实例化之前,无法编译模板代码。 / p>

是否存在模板代码的有效性?是否需要我们编译模板代码的每个实例以验证其有效性?

1 个答案:

答案 0 :(得分:-1)

关于这种有效性的标准talks

  

可以在任何实例化之前检查模板的有效性。 [注意:知道哪些名称是类型名称,就可以用这种方法检查每个模板的语法。 — 尾注]

如注释所述,可靠的检查仅仅是语法(或基于语法)。甚至查找非相关名称之类的规则也被规则覆盖,即无法实例化的任何模板都是不正确的格式,无需诊断。然后,实现可能根本不执行任何操作,包括编译一个执行某些操作的程序。 (这实际上是实施中的太多自由;其中某些规则可能只是“在实施时可自行决定是否采用错误格式(带有诊断)”。)