请考虑以下代码:
template <typename T, typename P, T P:: *s> struct H {};
struct AA { int i; };
int main()
{
typedef int AA::*PI;
constexpr PI pi = &AA::i;
H<int, AA, &AA::i> h1; // OK
// H<int, AA, pi> h2; // compile error
}
我有pi
指向的成员指针AA::i
。pi
是一个constexpr
变量。为什么即使&AA::i
直接使用也不能将其用作模板参数?
因为这些是规则,至少在C ++ 11中;14.3.2 / 1仅允许“指向如5.3.1中所述表示的成员的指针”,该指针描述了&AA::i
语法。
这在最新的草案中有所改变,现在任何类型的要求都只是“模板参数类型的转换常量表达式”,在此条件下,您的代码就可以了。
我不知道此更改是否在C ++ 14中进行,因为我尚无法访问该发布的标准。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句