如何使用 clang-format 隔开 lambda 的尾随返回类型

Cur*_*ous 5 c++ clang-format

有一些事情阻止我切换到 clang 格式。当我在 lambda 上有一个尾随返回类型应该换行到下一行时,箭头和尾随返回类型之间没有空格。我怎样才能解决这个问题?

例如,这是下面相同代码的未格式化版本的 clang-format 的输出

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

mlo*_*kot 2

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;
Run Code Online (Sandbox Code Playgroud)

后:

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

相关的是一个微妙的问题,clang-format 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;
Run Code Online (Sandbox Code Playgroud)

后:

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

相关邮件列表线程:[cfe-users] [clang-format] 尾随返回类型