繁体   English   中英

C ++ 11可变参数模板函数-错误在哪里?

[英]C++11 Variadic Template Function — where's the error?

以下代码给出了MSVC ++ 2012 CTP(具有C + 11支持)和Intel C ++ XE 13.0上的编译错误:

template <typename F, typename... Args>
    void apply(F f, std::tuple<Args...>& args) {
       // doesn't do much yet
}

bool f1(char c) {
    return c == 'c';
}

int main(int argc, char* argv[]) {
    auto t = std::make_tuple('c');
    apply(f1, t);
return 0;
}

VS2012错误是:

error C2243: 'type cast' : 
conversion from 'std::tuple<char,std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil> *'
 to 'std::tuple<std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil> &' exists,
 but is inaccessible

英特尔C ++ XE 13.0的错误是:

error : no instance of function template "apply" matches the argument list

我想念什么? 这里真的有错误吗,还是我只有两个错误的编译器?

更新:在两个编译器上使用boost :: tuple而不是std :: tuple时,结果相同(或相似)。

附录:感谢您在评论中进行所有复核。 我已将错误报告发送给这两家优秀公司。

这可能是标准库实施中的VC11错误。 尽管CTP支持可变参数模板,但据我所知,标准库并未重写为使用可变参数模板,而是采用了一些机制来模拟可变参数模板。 这可能是您问题的根源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM