采取的答案从这里:iterate over tuple关于打印std::tuple
成分,这里是代码:视觉工作室 - 性病解决方法错误c2770 :: enable_if
template<std::size_t I = 0, typename... Tp>
typename std::enable_if<I == sizeof...(Tp), void>::type
print(const std::tuple<Tp...>& t)
{ }
template<std::size_t I = 0, typename... Tp>
typename std::enable_if<I < sizeof...(Tp), void>::type
print(const std::tuple<Tp...>& t)
{
std::cout << std::get<I>(t) << std::endl;
print <i, Tp...> (t);
}
此编译和完美的作品在GCC,但无法编译在VC++(我使用Visual Studio 2013)。错误我在流汗:
Error 4 error C2893: Failed to specialize function template 'std::enable_if<I==1,void>::type print(const std::tuple<_Types1...> &)'
Error 3 error C2770: invalid explicit template argument(s) for 'std::enable_if<I<1,void>::type print(const std::tuple<_Types1...> &)'
appearntly上有C2770一中的缺陷利用std::enable_if
具有明确的模板参数时。一些开发商利用const int
作为预参数为模板
const int i = I+1;
print<i,Tp...>(t);
推荐但这也不管用。 还有其他的解决方案,如使用一些宏,但它们也失败了。
有人有解决它的方法吗?我搜索了一个解决方案,但没有发现任何实际的工作。
谢谢。
工作对我来说在VS2015 RC。发布(希望)即将推出,所以工具链升级可能是非标准的,但也是可行的选择。 (在VS2015中甚至没有提到'constexpr',更快的编译和链接等) – Drop
感谢他们修正了它:) :) –