繁体   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