初始化程序列表构造函数错误与CRTP

时间:2015-05-06 19:57:42

标签: c++ c++11 initializer-list crtp

我正在用C ++ 11弄湿我的脚,我真的很困惑,为什么这不起作用:

template <class T>
struct A {
  size_t size() const { return sizeof(T); }
};

struct B : A<B> {
  int x;
  int y;
};

B var {1, 5};

我正在使用gcc 4.8.2并收到错误消息:

no matching function for call to 'B(<brace-enclosed initializer list>)'

当我不从A派生时,它的工作正常,所以推导会以某种方式改变我的结构B的POD -

1 个答案:

答案 0 :(得分:10)

聚合初始化要求您的类型是聚合。聚合不能有基类:

  

聚合是一个没有用户提供的数组或类(第9条)   构造函数(12.1),没有私有或受保护的非静态数据成员   (第11条),没有基类(第10条),没有虚函数   (10.3)。