https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84476
Bug ID: 84476
Summary: [[nodiscard]] ignored on virtual functions accessed
through pointer
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: ixsci at yandex dot ru
Target Milestone: ---
Given: A class with a virtual function which result should not be discarded and
a pointer to that class.
Expected: Access to such a function w/o using its result should generate a
warning.
Actual result: no warning produced.
Code with comments where the warning is missing:
#include <memory>
using namespace std;
class A
{
public:
[[nodiscard]] virtual int getVal()
{
return 0;
}
[[nodiscard]] int getVal2()
{
return 0;
}
};
int main()
{
auto a = make_unique<A>();
// No warning
a->getVal();
// Warning
a->getVal2();
A aa;
// Warning
aa.getVal();
// Warning
aa.getVal2();
A* aaa = new A{};
// No warning
aaa->getVal();
// Warning
aaa->getVal2();
delete aaa;
};
Tested on Wandbox (gcc HEAD 8.0.1)