[英]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.