C++ 为什么铿锵格式会把代码搞糟?

C++ 为什么铿锵格式会把代码搞糟?,c++,clang,clang-format,C++,Clang,Clang Format,我的代码库有很多std::variant类型和函数,它们使用std::visit根据实际类型实现不同的行为 我使用clang格式,有时它会扰乱使用std::vision。我有一个名为visitor的函数,它从一堆lambda构建一个访问者。当lambda声明返回类型为auto&时,clangformat决定在每个lambda的右括号后开始断行,在左边空白处留下逗号 下面是一个示例函数,具有clangformat格式: struct A {}; struct B {}; typedef std::

我的代码库有很多
std::variant
类型和函数,它们使用
std::visit
根据实际类型实现不同的行为

我使用
clang格式
,有时它会扰乱使用
std::vision
。我有一个名为
visitor
的函数,它从一堆lambda构建一个访问者。当lambda声明返回类型为
auto&
时,
clangformat
决定在每个lambda的右括号后开始断行,在左边空白处留下逗号

下面是一个示例函数,具有
clangformat
格式:

struct A {};
struct B {};
typedef std::variant<A, B> AB;

template <class... Ts>
struct visitor : Ts... {
    using Ts::operator()...;
};
template <class... Ts>
visitor(Ts...) -> visitor<Ts...>;

AB& f(AB& ab) {
    auto v = visitor{[&](const A& a) -> auto& {std::cout << "A" << std::endl;
    return ab;
}
, [&](const B& b) -> auto& {
    std::cout << "B" << std::endl;
    return ab;
}
,
};
std::visit(v, ab);
}
这是我的
.clangformat
文件:

BasedOnStyle:  Google
ColumnLimit: 120
IndentWidth: 4
AccessModifierOffset: -4
AlignAfterOpenBracket: DontAlign
我用的是叮当声9


有人知道我能解决这个问题吗?

第二个后面似乎有一个额外的逗号lambda@user7860670尾随逗号,而不是C++的一部分,是CLAN扩展。如果删除逗号可以修复它,那么这将确认一个叮当作响的格式错误。删除额外的逗号并不能修复它。
BasedOnStyle:  Google
ColumnLimit: 120
IndentWidth: 4
AccessModifierOffset: -4
AlignAfterOpenBracket: DontAlign