https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84476
Albi <albrecht.guendel at web dot de> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |albrecht.guendel at web dot de
--- Comment #7 from Albi <albrecht.guendel at web dot de> ---
Its 2025 now. GCC15.1.
This is not good, and there is no reason for it.
This is broken.
This is dangerous.
This is INCONSISTENT.
This has serious consequences for Werror=unused-result
Regarding the inconsistency: why does (&d)->func() generate a warning here?
https://godbolt.org/z/zcTEfEEeY
struct Base
{
[[nodiscard]] virtual int func() { return 0;}
};
struct Derived: Base
{
[[nodiscard]] int func() override { return 1; }
};
int main()
{
Derived d;
// WARNING HERE OK
d.func();
// NO WARNING HERE - BROKEN SINCE 2018
Base* b = &d;
b->func();
// NO WARNING HERE - BROKEN SINCE 2018
dynamic_cast<Derived*>(b)->func();
// WARNING HERE BUT WHY??? I invoke on a Derived*, same as next test case.
(&d)->func();
// NO WARNING HERE - BROKEN SINCE 2018
Derived* pd = &d;
pd->func();
return 0;
}