我正在用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 -
答案 0 :(得分:10)
聚合初始化要求您的类型是聚合。聚合不能有基类:
聚合是一个没有用户提供的数组或类(第9条) 构造函数(12.1),没有私有或受保护的非静态数据成员 (第11条),没有基类(第10条),没有虚函数 (10.3)。