为什么我不能在C ++ 11中使用constexpr指针作为模板参数?

Zhipeng YANG

请考虑以下代码:

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::ipi是一个constexpr变量。为什么即使&AA::i直接使用也不能将其用作模板参数

迈克·西摩

因为这些是规则,至少在C ++ 11中;14.3.2 / 1仅允许“指向如5.3.1中所述表示的成员的指针”,该指针描述了&AA::i语法。

这在最新的草案中有所改变,现在任何类型的要求都只是“模板参数类型的转换常量表达式”,在此条件下,您的代码就可以了。

我不知道此更改是否在C ++ 14中进行,因为我尚无法访问该发布的标准。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我不能在界面中使用默认方法?

为什么我们不能在内核开发中使用C标准库函数?

为什么我不能在匿名类中使用<Class> .this?

为什么我不能在开关案例中使用枚举?

为什么我不能在C#中使用抽象静态方法?

为什么我不能在C ++中映射结构?

为什么我不能在Odoo 11的电子邮件模板主体中使用CDATA?

为什么我不能在C ++中输入我的std :: vector

为什么我不能在C ++的map的迭代器中使用+1?

为什么我不能在CSS Variable中使用rgba?

为什么我不能在Dart 2中使用通用类型作为参数?

为什么我不能在列表中使用匿名函数?

为什么我不能在aspx.cs文件中使用c#类?

为什么我们不能在C中使用变量作为e的值

为什么我不能在Swift中使用'object == nil'?

为什么我不能在子类中使用超类的属性(Objective-C)

为什么我不能在Java中处理参数?

为什么我不能在C#中使用整数作为while循环的条件?

为什么我不能在TRecord中使用Variable?

为什么我不能在 C# 三元表达式中使用 break?

为什么我不能在 Flatlist 中显示我的项目?

为什么我不能在 Python 中使用变量作为参数来调用这个函数?

为什么我不能在 init 中获得我的 fetchedResults?

为什么我不能在我的代码中使用“ balance ”?

为什么我不能在 Spark 中使用 combineByKey?

为什么我不能在 django 中使用模板标签

为什么我不能在 C++ 中更新我的类属性?

为什么我不能在我的 c 程序中使用 "%[^\n]" 扫描集?

为什么我不能在 C 中更改常量字符指针的内容?