繁体   English   中英

variadic模板必须具有可调用的特殊化,非空参数包才能格式正确吗?

[英]Must variadic template have callable specialization with non empty parameter pack to be well-formed?

一方面,存在规则[temp.res] /8.3 ,该规则指出如果可变参数模板的每个有效特化都需要空模板参数包,则程序格式错误且不需要诊断。 另一方面,人们可以想象当一个人可以显式地实例化模板的任何所需特化但不能称之为[temp.mem] /5.note-1的情况 ,例如:

struct foo {
    template <class... Ts>
    foo() { }
};

template
foo::foo<int, float, double>();

代码是否良好或者除了具有空模板参数包的那个之外不能调用任何有效的专业化这一事实违反了[temp.res] /8.3规则?

这让我想起了一些absurd的Haskell功能:

-- | Since 'Void' values logically don't exist, this witnesses the logical
-- reasoning tool of \"ex falso quodlibet\".
absurd :: Void -> a

这意味着一个函数接受一个Void实例并返回任何类型的实例。 说一个函数可以从无到有发明任何类型的实例是什么意思? 没关系,因为你无法想出一个Void实例进入它。

同样在这里。 在我看来,代码是格式良好的,如果愚蠢的话。 这里没有什么要求 Ts...是一个空包。 如果Ts...非空,程序仍然可以。 事实上,没有办法使Ts...非空似乎是正交的 - 如果你能想出一个构造非空Ts导致程序形成不良,可能[temp.res] / 8.3会适用 - 但你不能这样...... ¯\\_(ツ)_/¯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM