次のコードを検討してください。
struct A {
private:
A* const& this_ref{this};
};
int main() {
A a{};
(void)a;
}
でコンパイルすると、GCC v6.2 とclang v3.9の-Wextra
両方で警告が表示されます。
とにかく、以下に示すわずかに変更されたバージョンでは、動作が異なります。
struct A {
A* const& this_ref{this};
};
int main() {
A a{};
(void)a;
}
この場合、GCCは警告を出さず、clangは前の例で返されたのと同じ警告を出します。
警告はほぼ同じです。
それはclangのものに従います:
3 : 警告: 参照メンバー 'this_ref' を一時的な値 [-Wdangling-field] にバインドしています
どのコンパイラが正しいですか?
この場合、GCC は間違っていると思います。私は問題を提起していましたが、言語の不可解なコーナー ケースのため、逆かもしれません。