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

            Bug ID: 104537
           Summary: ICE when generic-lambda as function parameter fails to
                    be converted to pointer to function
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: nickhuang99 at hotmail dot com
  Target Milestone: ---

Consider this invalid conversion for this generic-lambda to pointer to function
which is defined by "decltype(+[](T&& t )->T{return t+1;}".
This ICE happens when original accepted parameter type changed from "T" to
"T&&".
See compiler explorer (https://www.godbolt.org/z/fde1bc3zE)

I suspect this is some related issue with another unconfirmed case PR104358.

template<typename T>
auto foo(T&& t, decltype(+[](T&& t )->T{return t+1;}) lam){
        return lam(t);
}
void test(){
        foo<int>(5, [](int t){return t+1;});
}


<source>:8:21: error: invalid user-defined conversion from
'test()::<lambda(int)>' to 'int (*)(int&&)' [-fpermissive]
    8 |         foo<int>(5, [](int t){return t+1;});
      |                     ^~~~~~~~~~~~~~~~~~~~~~
...
internal compiler error: error reporting routines re-entered.
0x2174365 warning_at(unsigned int, int, char const*, ...)
...
  • [Bug c++/104537] New: ICE when... nickhuang99 at hotmail dot com via Gcc-bugs

Reply via email to