gcc无法编译此代码,但是clang编译得很好。
根据this gcc是对的。因为有几个具有相同函数名的基类 - operator()
,这是一个歧义
真的是铿锵的虫子吗?或者可能是标准中的operator()
或其他不太明显的特殊查找规则?
#include <utility>
template <class... Ts>
class TMultiLambda: public Ts... {
public:
template <class... Fs>
TMultiLambda(Fs&&... Vs) noexcept: Ts(std::forward<Fs>(Vs))... {
}
};
template <class... Ts>
auto MakeMultiLambda(Ts&&... Vs) noexcept -> TMultiLambda<std::remove_reference_t<Ts>...> {
return { std::forward<Ts>(Vs)... };
}
int main() {
int x;
auto a = [x](int, int) { };
auto b = [x] (char) { };
auto c = MakeMultiLambda(a, b);
c(2, 2);
c('q');
return 0;
}
P.S。
您可以在线编译代码here,不要忘记将-std=c++1y
附加到编译器选项