[英]inheriting constructors doesn't allow array-like initialization
這是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'
。 在我看來,這絕對正確。
std::array
是一個聚合。 它沒有用戶定義的構造函數。
從C ++標准
1集合是沒有用戶提供的構造函數(12.1),沒有私有或受保護的非靜態數據成員(第11章), 沒有基類 (第10章),也沒有虛函數的數組或類(第9章) 10.3)。
類繼承不是聚合,因為它具有基類。 因此,它可能不使用括號初始化(空的初始化列表除外)。 如果您要使用非空的初始化列表進行初始化,則應為類繼承明確定義構造函數,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.