这是一个g ++错误吗?
#include <array>
struct inherit : std::array<int , 3>{
using std::array<int , 3>::array;
};
std::array<int, 3> ok1 = {1,2,3};
inherit ok2;
inherit bad = {1,2,3};
实例化bad
,我得到error: could not convert ‘{1, 2, 3}’ from ‘<brace-enclosed initializer list>’ to ‘inherit’
。看起来对我来说绝对正确。
答案 0 :(得分:3)
std::array
是一个聚合。它没有用户定义的构造函数。
来自C ++标准
1聚合是一个没有用户提供的数组或类(第9节) 构造函数(12.1),没有私有或受保护的非静态数据成员 (第11条),没有基类(第10条),没有虚函数 (10.3)。
class inherit不是聚合,因为它有一个基类。因此它可能不使用大括号初始化(除了空的初始化列表)。如果要使用非空初始化列表
初始化类继承,则应显式定义类继承的构造函数