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

            Bug ID: 90342
           Summary: Misleading #include system fixit when using an older
                    C++ version
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: blitzrakete at gmail dot com
  Target Milestone: ---

#include <memory>

int main() {
  std::make_unique<int>();
}

If I compile this with -std=c++11, I get:

<source>: In function 'int main()':

<source>:4:8: error: 'make_unique' is not a member of 'std'

    4 |   std::make_unique<int>();

      |        ^~~~~~~~~~~

<source>:2:1: note: 'std::make_unique' is defined in header '<memory>'; did you
forget to '#include <memory>'?

    1 | #include <memory>

  +++ |+#include <memory>

    2 | 

<source>:4:20: error: expected primary-expression before 'int'

    4 |   std::make_unique<int>();

      |                    ^~~

Compiler returned: 1

That note is very misleading, since failing to include that header is not the
reason why std::make_unique doesn't exist.

Reply via email to