簡體   English   中英

為什么使用默認構造函數的 list-Initialized object 在 gcc9 中編譯但在 gcc5.1 中不編譯?

[英]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

復制鏈接 - https://godbolt.org/z/hEz95dq4G

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM