https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121368

            Bug ID: 121368
           Summary: [[nodiscard]] warning not triggered when discarding
                    return value from function pointer call
           Product: gcc
           Version: 15.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: 2023091106 at cauc dot edu.cn
  Target Milestone: ---

g++ -std=c++17 -Wall -Wextra -Wunused -O0

====code====
#include <functional>

struct [[nodiscard]] S {};
S (*test_fun())();

int main(){
    test_fun()();                // No warning
    std::bind(test_fun())();    // Emits warning: discarding nodiscard return
    return 0;
}

====output====
warning: ignoring return value of type 'S' declared with 'nodiscard' attribute
[-Wunused-value]


Only for the std::bind(test_fun())() line.

No warning is emitted for test_fun()();, even though S is [[nodiscard]].

Reply via email to