【发布时间】:2016-02-14 22:35:49
【问题描述】:
我想知道防止指向数据成员的指针用作非类型模板参数的基本原理,如 [temp.arg.nontype] 中所述:
[注意:数组元素或非静态数据成员的地址不是 可接受的模板参数。 [snip] — 尾注]
此外,cppreference.com says that 指向数据成员的指针可以 用作非类型模板参数,但它们必须表示为 &Class::member。这似乎由以下代码确认(检查
在 Clang 和 GCC 上):
#include <type_traits>
struct Foo { int bar; };
using X = std::integral_constant<int Foo::*, &Foo::bar>; // works
using Y = std::integral_constant<int Foo::*, X::value>; // fails
因此,我想知道我是否遗漏了标准中的某些内容,或者 cppreference.com 在这一点上是错误的。如果 cppreference.com 是正确的,是否有任何理由允许 &Foo::bar 但不允许 X::value?
我正在使用C++14 working draft。
【问题讨论】: