【发布时间】:2015-03-24 12:43:16
【问题描述】:
我想知道是否允许这样的模板构造:
template<typename T, T arr[4]>
template<typename T, T func(void)>
最新的 ISO C++ 14 草案第 14.1.4 节中的第一个状态:
如您所见,上面的列表显示了模板参数允许的类型,其中没有像“函数”或“数组”这样的东西。然而,最近在第 14.1.8 节,我们有了这个(即使有引用的例子):
所以问题是 - 编译器是否应该允许这样的构造?或者因为这是一个草稿 - 有人可以将它与原始版本进行比较并说它是否相同?可能有问题。
编辑:我要的是标准纸。它的写法有缺陷吗?
我个人的看法是,在任何情况下都不应该允许这种愚蠢和令人困惑的结构。尤其是在 C++ 模板中。
【问题讨论】:
-
与 C++11 标准相同。
-
14.1 (8) 不是问题的答案吗?将类型调整为允许的类型,然后就没有问题了。
-
否,因为在任何情况下模板参数类型都不应该是“函数”或“数组”之一。 14.1 (4) 保证了这一点。
-
你为什么认为这是白痴和混淆?
-
因为“数组”不是“指针”,而模仿另一种类型绝不是一种想要的行为。关于这个问题我已经谈得差不多了。如果您不了解其中的区别,请阅读它。
标签: c++ templates parameters language-lawyer c++14