VS2015 Variadic模板错误?

时间:2016-05-22 11:04:45

标签: c++

template<typename T0, typename T1, typename ...ArgN>
bool is_any_test(T0 arg0, T1 arg1, ArgN... argn...)
    {
    return arg0 == arg1 || is_any_test<T0, ArgN...>(arg0, argn...);
    };

template<typename T0, typename T1>
bool is_any_test(T0 arg0, T1 arg1)
    {
    return arg0 == arg1;
    };

int wmain(int /*argc*/, const wchar_t* /*argv[]*/)
    {
    is_any_test(3,4);
    return 0;
    };

(可以在这里运行http://webcompiler.cloudapp.net/

在VS2015上,这会导致

C2668 ambiguous call to overloaded function

在VS2013上,这很好用。 这是一个错误还是我错过了什么? 有没有workaroung? (将所有的行为改为普通的ifs - 不是一种选择)

2 个答案:

答案 0 :(得分:0)

我已将您的代码修改为工作示例(未经过100%测试..)

template <class T>
bool is_any_test_impl(T t) {
    return false;
}

template<class T1,class T2,class... Args>
bool is_any_test_impl(T1 t1, T2 t2, Args&&... args) {
    return t1 == t2 || is_any_test_impl(std::forward<T1>(t1),std::forward<Args>(args)...);
}

template<class... Args>
bool is_any_test(Args&&... args)
{
    return is_any_test_impl(std::forward<Args>(args)...);
};

/*
    auto b = is_any_test(1, 2, 3, 4, 5); //false
    auto b1 = is_any_test(1, 2, 3, 4, 5, 1); //true
*/

答案 1 :(得分:0)

错字。有关更多详细信息,请参阅评论......

相关问题