Wil*_*urn 5 c++ clang clang-format
我的代码库有很多std::variant类型和函数,用于std::visit根据实际类型实现不同的行为。
我正在使用clang-format,有时它会扰乱使用的功能std::visit。我有一个名为 的函数visitor,它从一堆 lambda 表达式中构建一个访问者。看起来,当 lambda 声明返回类型为 时auto&,clang-format决定在每个 lambda 的右大括号之后开始换行,将逗号留在左边距。
这是一个示例函数,其clang-format格式如下:
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);
}
Run Code Online (Sandbox Code Playgroud)
它应该是这样的(如果我删除它,我会得到它-> auto&):
AB& f(AB& ab) {
auto v = visitor{
[&](const A& a) {
std::cout << "A" << std::endl;
return ab;
},
[&](const B& b) {
std::cout << "B" << std::endl;
return ab;
},
};
std::visit(v, ab);
}
Run Code Online (Sandbox Code Playgroud)
这是我的.clang-format文件:
BasedOnStyle: Google
ColumnLimit: 120
IndentWidth: 4
AccessModifierOffset: -4
AlignAfterOpenBracket: DontAlign
Run Code Online (Sandbox Code Playgroud)
我正在使用 Clang 9。
有谁知道我可以解决这个问题吗?