次のコードは、MSVC ++ 2012 CTP(C + 11をサポート)とIntel C ++XE13.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
Intel C ++XE13.0のエラーは次のとおりです。
error : no instance of function template "apply" matches the argument list
私は何が欠けていますか?ここに本当にエラーがありますか、それとも2つの悪いコンパイラがありますか?
更新:両方のコンパイラでstd::tupleの代わりにboost::tupleを使用すると、同じ(または同様の)結果が得られます。
補遺:コメントのすべてのクロスチェックに感謝します。私はこれらのすばらしい企業の両方にバグレポートを送りました。