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

--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Literally all of the same error message even:
clang:
<source>:2:47: error: function 'operator()<(lambda at <source>:2:12), int>'
with deduced return type cannot be used before it is defined
  auto f = [](const auto &g, auto x) { return g(g, x); };
                                              ^
<source>:3:4: note: in instantiation of function template specialization
'main()::(anonymous class)::operator()<(lambda at <source>:2:12), int>'
requested here
  f(f, 0);
   ^
<source>:2:12: note: 'operator()<(lambda at <source>:2:12), int>' declared here
  auto f = [](const auto &g, auto x) { return g(g, x); };
           ^

ICC:
<source>(2): error: cannot deduce the return type of function "lambda [](const
auto &, auto)->auto [with <auto-1>=lambda [](const auto &, auto)->auto,
<auto-2>=int]" (declared at line 2); it has not been defined
    auto f = [](const auto &g, auto x) { return g(g, x); };
                                                ^
          detected during instantiation of function "lambda [](const auto &,
auto)->auto [with <auto-1>=lambda [](const auto &, auto)->auto, <auto-2>=int]"
at line 3

compilation aborted for <source> (code 2)

MSVC:
<source>(2): error C3779: 'main::<lambda_1>::operator ()': a function that
returns 'auto' cannot be used before it is defined
<source>(2): note: see declaration of 'main::<lambda_1>::operator ()'
<source>(3): note: see reference to function template instantiation 'auto
main::<lambda_1>::operator ()<main::<lambda_1>,int>(const _T1 &,_T2) const'
being compiled
        with
        [
            _T1=main::<lambda_1>,
            _T2=int
        ]

Reply via email to