[英]Why is the copy-constructor not called when returning by-value a list-initialized object?
[英]Why does list-Initialized object using default constructor compile in gcc9 but not in gcc5.1?
為什么以下代碼在 gcc9 中編譯但在 gcc5.1 中不編譯?
struct AAA {
int xxx = 1;
};
int main() {
AAA p;
new AAA{p};
}
使用 gcc5.1 編譯時出錯 -
/home/genstor/cpp/test.cpp:11:18: error: cannot convert 'AAA' to 'int' in initialization
new AAA{p};
^
到目前為止我發現了什么?
我已經看到,對使用默認構造函數的結構使用列表初始化器在 4.8.1 中從這里編譯時會出現一些問題,但無法將其與此相關聯,因為它是 5.1。 任何幫助理解這一點的幫助表示贊賞。
CMD: g++ ~/cpp/test.cpp --std=c++14
gcc5.2解決了問題 51747
與標准缺陷報告#1467相關
修改8.5.4[dcl.init.list]第3段如下:
object 或類型 T 的引用的列表初始化定義如下:
如果 T 是 class 類型並且初始化列表有一個 cv T 類型的元素或從 T 派生的 class 類型,則 object 從該元素初始化。
否則,如果 T 是聚合...
我不確定為什么 c++11 會編譯。 gcc 的錯誤報告似乎表明它也不會編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.