我最近升级到了Visual Studio 2017,现在我从标准库中收到语法错误。

这是输出:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\include\ratio(220): error C2947: expecting '>' to terminate template-argument-list, found '<'
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\include\ratio(221): error C2226: syntax error: unexpected type 'std::integral_constant<_Ty,_Val>::type'
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\include\ratio(221): error C2988: unrecognizable template declaration/definition
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\include\ratio(221): error C2059: syntax error: ','

这是发生的地方:
template<class _R1,
    class _R2,
    bool _Sfinae>
    struct _Ratio_multiply_sfinae<_R1, _R2, _Sfinae, void_t<
        typename _Ratio_multiply<_R1, _R2>::_Num::type,
        typename _Ratio_multiply<_R1, _R2>::_Den::type>>
    {   // typename ratio<>::type is unnecessary here
    typedef ratio<
        _Ratio_multiply<_R1, _R2>::_Num::value,
        _Ratio_multiply<_R1, _R2>::_Den::value> type;
    };

我的猜测是,编译器以某种方式认为>>是运算符,但出于测试目的,我无法将其编辑为> >

我没有包括<ratio>,但我认为它用于<chrono>,因此也用于<mutex>

更新:

我只是意识到,在编译期间,InteliSense会抱怨那个地方,但是在编译前后,它不会抱怨它。某种程度上,似乎编译器设置已更改,但是我不知道。另一个问题是为什么它与vs2013一起使用。

最佳答案

我认为标准在C++ 03和C++ 11之间进行了更改,以解决您提到的有关“>>” vs“>>”的问题

您可能需要切换编译器版本。

关于c++ - 从vs2013升级到vs2017后,<ratio>和<memory>中的错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47218087/

10-08 22:09