Как расставить конечный возвращаемый тип лямбды с помощью clang-format

Есть несколько вещей, которые мешают мне переключиться на clang-формат. Когда у меня есть конечный возвращаемый тип лямбды, который должен переноситься на следующую строку, между стрелкой и конечным типом возвращаемого значения нет пробела. Как я могу это исправить?

Например, это вывод clang-format для неформатированной версии того же кода ниже.

auto func() {
    return [.......](auto one, auto long_parameter_list, auto another)
        ->SomeLongReturnType;
//      ^^^^^^^^^^^^^^^^^^^^^ How can I add a space in between those?
}

person Curious    schedule 29.10.2017    source источник


Ответы (1)


TL;TR: обновите до clang-format 7.0 или более поздней версии.

Clang-format 7.0 поставляется с исправлениями, связанными с завершающим возвратом, поэтому вы сможете добиться желаемого форматирования:

До

template <int K, typename E, typename L, int N>
auto ccccccccccccccccccccccc(detail::base<E, L, N>& p) -> std::add_lvalue_reference<E>::type;

После:

template <int K, typename E, typename L, int N>
auto ccccccccccccccccccccccc(detail::base<E, L, N> &p)
    -> std::add_lvalue_reference<E>::type;

С этим связана небольшая проблема, от которой все еще страдает формат clang 7 https://bugs.llvm.org/show_bug.cgi?id=42835 и не делает отступ для разрыва конечного возврата, если используется typename:

До:

template <int K, typename E, typename L, int N>
auto bbbbbbbbbbbbbbbbbbbbbbb(detail::base<E, L, N>& p) -> typename std::add_lvalue_reference<E>::type;

После:

template <int K, typename E, typename L, int N>
auto bbbbbbbbbbbbbbbbbbbbbbb(detail::base<E, L, N> &p) ->
    typename std::add_lvalue_reference<E>::type;

Связанная ветка списка рассылки: [cfe-users] [clang-format ] Тип возвращаемого значения в конце

person mloskot    schedule 30.07.2019
comment
Существуют ли какие-либо варианты управления конечным возвращаемым типом? Он не ломается перед этим в нешаблонных функциях? Я хотел бы всегда ломаться до и после этого и немного идентифицировать его. - person Zingam; 21.03.2021