簡體   English   中英

友元函數聲明中的內聯說明符

[英]inline specifier in a friend function declaration

我有一個關於 N4842 的問題。

對於 9.2.7 內聯說明符,有

“如果在友元函數聲明中使用了內聯說明符,則該聲明應為定義,或者該函數之前應已聲明為內聯。”

在第五段。

但是下面的代碼沒有發生錯誤。

struct X{
     friend inline void f();
};

void f(){} // no error

為什么沒有錯誤? 請教我。

似乎是一個編譯器錯誤,我能夠在所有三大編譯器上重現。 這里的標准措辭非常明確:

10.1.6/5(最新草案):

如果在友元函數聲明中使用內聯說明符,則該聲明應為定義,或者該函數先前應已聲明為內聯。

4.1/1:

可診斷規則集包括本國際標准中的所有句法和語義規則,但那些包含“不需要診斷”或被描述為導致“未定義行為”的明確符號的規則除外。

...

(2.2)——如果一個程序包含違反任何可診斷規則或出現本國際標准中描述為“有條件支持”的結構,而實現不支持該結構,則符合要求的實現應發出至少一個診斷消息.

由於該規則未標記為“不需要診斷”,因此未能提供一個是編譯器錯誤。 如果您對此感覺強烈,則可以提交錯誤報告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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