簡體   English   中英

錯誤<ratio>和<memory>從vs2013升級到vs2017后

[英]error in <ratio> and <memory> after upgrading from vs2013 to vs2017

我最近升級到 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 之間發生了變化,以解決您提到的有關“>>”與“>>”的問題

您可能需要切換編譯器版本。

這是一個老話題。 但我最近遇到了一個非常相似的問題。 根本原因是代碼中的某個地方有一個像

#define void_t void

這引發了編譯器錯誤。 將其轉換為 typedef 有幫助。

正如你可以看到void_t在的定義中使用_Ratio_multiply_sfinae並且也是在定義<ratio>作為模板結構。 上面的定義搞砸了一切。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM