【问题标题】:How to space out trailing return type of lambda with clang-format如何使用 clang 格式分隔 lambda 的尾随返回类型
【发布时间】:2017-10-29 16:19:12
【问题描述】:

有几件事阻止我切换到 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?
}

【问题讨论】:

    标签: c++ clang-format


    【解决方案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-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;
    

    之后:

    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

    【讨论】:

    • 是否有任何选项可以控制尾随返回类型?它不会在非模板函数中中断吗?我想总是在它之前和之后打破它并稍微识别它。
    猜你喜欢
    • 2017-03-16
    • 2020-06-13
    • 2019-02-04
    • 1970-01-01
    • 2020-11-02
    • 2020-01-10
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多