考虑以下代码:
#include <variant>
struct A {};
struct B {};
using V = std::variant<A, B>;
struct Foo {
void alpha(V v) {
std::visit([this] (auto a) { beta(a); }, v);
}
template <typename T>
void beta(const T&) { }
};
int main() {
Foo f;
f.alpha(A{});
f.alpha(B{});
}
使用g ++ 7.2编译代码很好,但无法使用clang4.0进行编译。如果我搬家
template <typename T>
void beta(const T&) { }
以上alpha
然后clang工作正常。
我认为这与两阶段查找有关,但我不确定。有谁知道发生了什么事?