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

            Bug ID: 81182
           Summary: result of ‘operator->()’ yields non-pointer result
           Product: gcc
           Version: 6.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gcc at baszerr dot eu
  Target Milestone: ---

Created attachment 41615
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=41615&action=edit
minimal (not) working example

it looks like arrow operator does not work correctly, when it is part of a
template class, called from a template function, and return type is "auto". it
does not compile, while the code is fine. it also works fine on Clang.

$ g++ -Wall arrow_operator.cpp
arrow_operator.cpp: In function ‘void problem()’:
arrow_operator.cpp:24:7: error: result of ‘operator->()’ yields non-pointer
result
     op->doNothing();

test code reproducing a bug (attached) provides two macros, that define a
workaround for the issue: return "auto*" or make calling function ("problem()")
not a template.

i've also noticed, that defining a non-template function, with the same content
as "templated" one, but under a different name, does make the problem disappear
as well... but only if the function is before the template - not when it is
after.

Reply via email to