C ++标准中的[temp.res] / 8是否会使该程序格式错误?

时间:2018-11-27 15:33:01

标签: c++ templates language-lawyer

让我们考虑一个仅特殊化有效的模板类的基本情况:

template<bool B>
struct OnlyTrue; // { static_assert(B != B, "Only true!"; };

template<> struct OnlyTrue<true> { static constexpr bool value = true; };

static constexpr bool b = OnlyTrue<true>::value;

上面的一个示例有效地有效地禁止了OnlyTrue<false>在程序中的使用。另一种选择是取消注释static_assert-使其完整,尽管不可编译。这种方法的好处是,如果以不允许的值实例化,将生成更加人性化的诊断。 (有关同一技术的更有意义的示例,请参见Mapping an integral template parameter value onto a primitive type

现在要问的是-最新的C ++标准中,[temp.res] / 8是否会是8.1:

  

该程序格式不正确,无需诊断,如果:...没有有效   可以为模板或模板的子语句生成专门化   模板中的constexpr if语句,而该模板不是   实例化...

使以上代码段格式错误,不需要诊断吗?

0 个答案:

没有答案