GCC 7.3 是否省略了引用返回成员函数的 [[nodiscard]] 属性?

Does GCC 7.3 omit the [[nodiscard]] attribute for reference returning member functions?

我使用 C++17.

[[nodiscard]] 属性获得了以下代码
class SomeClass {
public: /** Methods **/
    [[nodiscard]] int getValue()  { return n; }
    [[nodiscard]] int &getRef()   { return n; }
    [[nodiscard]] int *getPtr()   { return &n; }

private: /** Members **/
    int n{5};
};

int main() 
{
    SomeClass object;

    object.getValue();
    object.getRef();
    object.getPtr();

    return 0;
}

当我用 GCC 7.3 编译它时,我收到两个警告,指出两个函数的 return 值被忽略。编译器检测到的两个函数是没有 return 引用的函数,getValue()getPtr().

另一方面,当使用GCC 8.1及以上版本编译时,getRef()也会导致警告。

C++ support table provided by GCC shows that the [[nodiscard]] attribute is fully supported as of version 7. It also has a white paper.

Appearance of a [[nodiscard]] call as a potentially ­evaluated discarded­ value expression is discouraged unless explicitly cast to void.

那么,这是错误还是我遗漏了什么?

是的,这是一个错误。正如您已经意识到的那样,它已在 GCC 8 中修复。

错误报告:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80896