新公布的草案中提到[expr.prim.req]/6 https://eel.is/c++draft/expr.prim.req#6.sentence-6:
如果将模板参数替换为要求会
总是导致替换失败,程序格式错误;不
需要诊断。 [Example:
template<typename T> concept C =
requires {
new int[-(int)sizeof(T)]; // ill-formed, no diagnostic required
};
— 结束示例 ]
但为什么我们不能保证诊断总是失败,而不是跳过诊断呢?
需求表达式几乎可以做任何事情。它们可以引发进一步的模板替换,通过任意数量的代码向外级联。并记住模板替换构成图灵完备语言 https://stackoverflow.com/questions/7284/what-is-turing-complete.
因此,您要求编译器在给定图灵完整程序的情况下证明是否存在某些输入导致该程序格式良好。这只是对停止问题的重述。就像停止问题一样,在一些简单的情况下,程序显然会停止/不停止。但是当您处理图灵完备的语言时,它可能会变得任意复杂。
该标准不会强迫编译器解决停止问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)