考虑以下代码:
struct A {
private:
A* const& this_ref{this};
};
int main() {
A a{};
(void)a;
}
如果使用 编译-Wextra
,GCC v6.2 和clang v3.9 都会显示警告。
无论如何,使用下面显示的稍微修改的版本,它们的行为会有所不同:
struct A {
A* const& this_ref{this};
};
int main() {
A a{};
(void)a;
}
在这种情况下, GCC不给出任何警告,clang给出与前面示例中返回的相同的警告。
警告几乎相同。
它遵循来自 clang 的那个:
3:警告:将引用成员 'this_ref' 绑定到临时值 [-Wdangling-field]
哪个编译器是对的?
我会说 GCC 在这种情况下是错误的,并且我正在打开一个问题,但也许它恰恰相反,因为该语言的一个神秘的角落案例。