如何使 clang-format 11 在可变参数模板声明之后放置 space

How to make clang-format 11 put a space after variadic template decleration

我不确定发生了什么以及如何准确描述它。这是源代码

template <typename ...Args>
void foo(Args &&...args)
{
    bar(std::forward<Args>(args)...);
}

我的朋友在 Ubuntu 上使用 clang-format 10 生成了这个

template <typename ... Args>
void foo(Args &&... args)
{
    bar(std::forward<Args>(args)...);
}

但是我在 Arch 上使用相同 .clang-format 文件的 clang-format 11 生成了以下内容:


template <typename ...Args>
void foo(Args &&...args)
//              ^^^^ Notice the missing space after ...
{
    bar(std::forward<Args>(args)...);
}

我没有在 clang-fotmat 11's changelog 中发现可疑的变化。我错过了什么?

由于我遇到了同样的问题,经过一些 git bisecting,我找到了引入此更改的提交:https://reviews.llvm.org/D83564

clang-format does not obey PointerAlignment: Right for ellipsis in declarator for pack

此更改背后的原因是您可以考虑注释 &&... 类型 (PointerAlignment: Left) 或变量 (PointerAlignment: Right) 的一部分,或者如果您愿意,把它放在中间 (PointerAlignment: Middle)。此更改旨在防止 &&&&... 参数(包)之间的不一致,其格式如下

template <typename Arg, typename ...Args>
void foo(Arg &&arg, Args &&... args)
{
    bar(std::forward<Args>(args)...);
}

使用较旧的 clang 格式,但像这样

template <typename Arg, typename ...Args>
void foo(Arg &&arg, Args &&...args)
{
    bar(std::forward<Args>(args)...);
}

最近的一个。