代码之家  ›  专栏  ›  技术社区  ›  con ko

为什么使用一个被视为不正确的无效概念

c++
  •  0
  • con ko  · 技术社区  · 5 年前

    新发布的草案提到 [expr.prim.req]/6 :

    如果将模板参数替换为 要求 将 总是导致替换失败,程序格式不正确;不 需要诊断。[ 例子:

    template<typename T> concept C =
    requires {
      new int[-(int)sizeof(T)];     // ill-formed, no diagnostic required
    };
    

    示例 ]

    但是为什么我们不能保证诊断总是失败,而不是跳过诊断呢?

    0 回复  |  直到 5 年前
        1
  •  6
  •   Nicol Bolas    5 年前

    需求表达式几乎可以做任何事情。它们可以引发进一步的模板替换,通过任意数量的代码向外级联。请记住,模板替换构成 Turning complete language .

    因此,你要求编译器在给定一个图灵完备程序的情况下,证明是否有一些输入导致该程序格式良好。这只是对停机问题的重申。就像停止问题一样,在一些简单的情况下,程序明显停止/不停止。但是当你处理图灵完备语言时,它可能会变得任意复杂。

    该标准不会强制编译器解决停机问题。