谁是错误的gcc或clang,为什么?

时间:2015-09-09 19:53:05

标签: c++ c++11 gcc

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附加到编译器选项

0 个答案:

没有答案