2013-07-19 82 views
6

是否可以確定C++標準庫是否使用預處理器指令支持C++ 11?是否有用於檢測C++ 11標準庫的預處理器指令?

我目前正在使用C++ 11語言方言的項目,但與C++標準庫沒有C++ 11支持(我需要這個能夠鏈接到非C++ 11庫)。

我知道我可以使用#if __cplusplus >= 201103L測試C++ 11的支持,但在我的情況下,這將評估爲true。我需要知道C++標準庫對C++ 11的支持。

+1

相關:http://stackoverflow.com/q/11886288/743214 –

+1

*「我知道我可以使用'#if __cplusplus> = 201103L'測試C++ 11的支持嗎?」 - 否,甚至沒有。由於大多數編譯器只支持C++ 11的一個子集(儘管這個子集可能很大),但這個'__cplusplus'宏完全沒用。標準功能(無論是語言還是庫)的可移植性測試仍然是一個未解決的問題(儘管*嘗試*解決它是在他們的路上,因爲* TemplateRex *在他的答案中指出)。 –

+1

對我來說,你的問題聽起來像你需要像CMake或自動工具一樣的配置工具。他們會爲您進行檢查並生成一個包含您可以評估的宏的標題。如果你只有一個庫,你可能會要求你的用戶提供一個宏 - 仍然是一個糟糕的解決方案。 – usr1234567

回答

3

功能測試是標準委員會走向下一個C++ 14標準(及其以後)的積極研究方向。有一個第10研究組,其自由訪問mailinglist正在討論當前的發展。對於下次會議,此N3694 working paper已提交。

3

我的問題是在C++標準庫的選擇在libstd++ (GNU C++ standard library)libc++ (LLVM C++ standard library with C++11 support)之間的iOS平臺上。我結束了使用_GLIBCXX_。完整的代碼最終成爲:

#ifndef _GLIBCXX_ 
template <class T> 
T&& move (T& arg) noexcept { 
    return static_cast<T&&>(arg); 
} 
#endif 
+1

我假設你的意思是'__GLIBCXX__',你的意思是'ifdef'而不是'ifndef'?你的測試假設libstdC++從來沒有C++ 11的支持,但事實並非如此,只有你的Mac自帶的古老版本沒有C++ 11的支持。 –

+0

...一年後......我實際上最終使用自己的手動預處理器定義,而不是依靠標準庫的自動檢查。 – Mortennobel