c++ - 如何使clang-format 11在可变参数模板声明后放置一个空格
问题描述
我不确定发生了什么以及如何准确地描述它。这是源代码
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 的 changelog中没有发现可疑的变化。我错过了什么?
解决方案
由于我遇到了同样的问题,经过一番git bisect
研究,我找到了引入此更改的提交:https ://reviews.llvm.org/D83564
clang 格式不遵守
PointerAlignment: Right
包装声明符中的省略号
此更改背后的原因是您可以考虑类型 ( ) 或变量 ( ) 的注释&&...
部分,或者如果需要,将其放在中间 ( )。此更改旨在防止具有和参数(包)之间的不一致,其格式如下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)...);
}
与最近的一个。
推荐阅读
- pandas - 按系列划分 Pandas Dataframe - 为什么它有效?
- python - 最小化径向图中的交叉点(networkx,graphviz)
- android - 如何合并 3 个或更多不同泛型的 LiveData 源?
- jenkins - $Variable 未在 Jenkinsfile 的库定义中扩展
- python - 导入不和谐 ModuleNotFoundError:没有名为“不和谐”的模块
- typescript - 创建具有返回实例的方法的抽象类 this
- javascript - React-Native:无法将状态中数组的大小设置为状态中另一个数组的大小
- c - 无法弄清楚我在使用数组时做错了什么——警告我是新手并且正在学习
- c++ - C++ 类继承和成员函数
- python - 熊猫 to_mardown() 突出显示行