Не удается скомпилировать атрибут функции в лямбда-выражении с явным типом возврата - PullRequest
0 голосов
/ 04 марта 2020

Следующая программа не компилируется в g ++ 9.1 и 9.2 (с --std=c++17):

int main()
{
    auto foo = [&]() __attribute__((always_inline)) -> bool { return true; };
}

Со следующей ошибкой:

file.cpp: In lambda function:
file.cpp:3:53: error: expected '{' before '->' token
    3 |     auto foo = [&]() __attribute__((always_inline)) -> bool { return true; };
      |                                                     ^~
file.cpp: In function 'int main()':
file.cpp:3:53: error: base operand of '->' has non-pointer type 'main()::<lambda()>'
file.cpp:3:56: error: expected unqualified-id before 'bool'
    3 |     auto foo = [&]() __attribute__((always_inline)) -> bool { return true; };
      |                                                        ^~~~

Эта программа успешно компилируется с g ++ 4,7-8,3, а также Clang ++ от 3,5 до 9,0. Это ошибка G CC или я что-то не так делаю?

1 Ответ

1 голос
/ 04 марта 2020

Это G CC ошибка Ошибка 90333 - [9 Регрессия] Невозможно применить атрибуты к лямбдам с конечным возвратом . Это было введено с R265787 и запланировано как исправлено в 9.3.

...