2014-11-24 188 views
2

std::chrono應該在g++ 4.8.*中支持。但是,當我嘗試使用它編譯使用g++ 4.8.3時,它找不到各種聲明。我當然在使用-std=c++11g ++ 4.8。* std :: chrono Undeclared

例如這個調用(從一個自動生成的文件,這就是爲什麼-std出現了兩次):

g++-4.8 -g -msse2 -m64 <defines> <warnings> -std=c++11 -fexceptions -std=c++11 <includes'-path> -c <source-file.cpp> -o <out-path>

產生以下錯誤:

<source-file, line>: error: ‘std::chrono::monotonic_clock’ has not been declared

我沒能找到verymuch那並不是立即編譯器版本或丟失-std=c++11。從this推斷,我不需要別的東西。

問題:怎麼回事,我該如何解決?

回答

2

標準C++中沒有std::chrono::monotonic_clock。然而,有一個std::chrono::steady_clock

公平地對待微軟和各地的捲餅 - there was a monotonic_clock in the working drafts during the development of C++11 which was replaced by steady_clock

+0

從技術上講,它的存在依賴於實現。例如,代碼在MSVC中編譯。謝謝。 – imallett 2014-11-24 19:41:19

+0

@imallett該標準允許實現在命名空間'std'和嵌套命名空間中添加其他名稱,所以在某些實現中可能會有'std :: chrono :: i_like_burritos'。但是並不要求C++ 11中名稱空間'chrono'有一個名爲'i_like_burritos'(或'monotonic_clock')的成員。 (或C++ 14,這是一個恥辱,因爲我真的喜歡墨西哥捲餅。) – Casey 2014-11-24 19:44:53

+0

當然。我只是說'std :: chrono :: monotonic_clock'是一個捲餅。 – imallett 2014-11-24 19:48:07

1

在我看來,(提供steady_clock但可能不是monotonic_clock),您可以使用這樣的代碼,以確定是否您使用的是舊庫實現(即提供monotonic_clock但不steady_clock),或一個新的。

#if defined(__GLIBCXX__) && (__GLIBCXX__ < 20120322) 
typedef std::chrono::monotonic_clock steady_clock; 
#else 
typedef std::chrono::steady_clock steady_clock; 
#endif 

的郵戳以上對應於附帶GCC 4.7.0,according to GNU所述的libstdC++。我希望對此代碼進行任何改進或更正,例如支持libstdC++以外的庫。

相關問題