https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90333
Bug ID: 90333
Summary: Can't apply attributes to lambdas with trailing
returns
Product: gcc
Version: 9.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: patrick.a.moran at gmail dot com
Target Milestone: ---
In 8.3.0 we could do either one of these:
> []() __attribute__((always_inline)) -> int { return 0; }
> []() [[gnu::always_inline]] -> int { return 0; }
I understand that __attribute__ is a GCC extension, but it's my understanding
that the second one is standard behavior.
As of 9.1.0, the __attribute__ variant both fails with "expected '{' before
'->' token", and the [[gnu::always_inline]] variant fails because it's applying
the attribute to the trailing return type rather than the lambda.
I tried every possible position, but each fails
* __attribute__((always_inline)) []() -> int { return 0; }
* [[gnu::always_inline]] []() -> int { return 0; }
* These fail with "attributes at the beginning of statement are ignored"
* IE, it's not actually applying to the lambda.
* [] __attribute__((always_inline)) () -> int { return 0; }
* [] [[gnu::always_inline]] () -> int { return 0; }
* These fail with "expected '{' before '[' token" (or "__attribute__")
* []() __attribute__((always_inline)) -> int { return 0; }
* This fails with "expected '{' before '->' token
* []() [[gnu::always_inline]] -> int { return 0; }
* This fails with "attribute ignored"
* It is applying the attribute as an attribute of the return type
* []() -> __attribute__((always_inline)) int { return 0; }
* []() -> [[gnu::always_inline]] int { return 0; }
* This fails with "attribute does not apply to types"
* It is applying the attribute as an attribute of the return type
* []() -> int [[gnu::always_inline]] { return 0; }
* []() -> int __attribute__((always_inline)) { return 0; }
* This fails with "attribute does not apply to types"
* It is applying the attribute as an attribute of the return type
* []() -> int { return 0; } __attribute__((always_inline))
* Fails with "expected ';' before '__attribute__'"
* []() -> int { return 0; } [[gnu::always_inline]]
* Fails with "two consecutive '[' shall only introduce an attribute before
'[' token
It would appear that in 9.1.0 there's no way to specify attributes for a lambda
that has a trailing return type?