如何用clang格式分隔尾随返回类型的lambda

时间:2017-10-29 16:19:12

标签: c++ clang-format

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

例如,这是clang格式的输出,用于下面相同代码的无格式版本

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

1 个答案:

答案 0 :(得分:2)

TL; TR:升级到 clang格式7.0 或更高版本。

clang格式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;

相关是一个微妙的问题,如果使用typename,则clang格式7仍然会遭受https://bugs.llvm.org/show_bug.cgi?id=42835的影响,并且不会缩进尾随收益的破损:

之前:

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] Trailing return type