簡體   English   中英

確定C ++ 0x可用性

[英]Determine C++0x availability

我正在嘗試確定編譯時C ++ 0x功能是否可用。 是否有一個共同的預處理器宏? 我正在使用Visual Studio 2010的編譯器和Intel的編譯器。

__cplusplus 的值大於199711L

也就是說,並非所有編譯器都會將此值填滿。 最好使用Roger的解決方案。

通常的方法是在構建系統中確定它,並在編譯時傳遞“配置宏”,通常命名為HAS_ *。 例如: compiler -DHAS_LAMBDA source.cpp

如果您可以從編譯器版本宏中確定這一點,那么您可以在配置標頭中定義這些宏來檢查; 但是,對於由命令行選項控制的任何內容,您將無法執行此操作。 您的構建系統確實知道您指定了哪些選項,並且可以使用該信息。

請參閱boost.config以獲取真實示例以及有關特定編譯器,版本和功能的大量詳細信息。

我們在nullptr和auto_ptr方面遇到了類似的問題。 以下是我們在使用標准化之前嘗試使用的內容:

#include <cstddef>
...

// GCC: compile with -std=c++0x
#if defined(__GNUC__) && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 6) || (__GNUC__ >= 5))
# define HACK_GCC_ITS_CPP0X 1
#endif

#if defined(nullptr_t) || (__cplusplus > 199711L) || defined(HACK_GCC_ITS_CPP0X)
# include <memory>
  using std::unique_ptr;
# define THE_AUTO_PTR  unique_ptr
#else
# include <memory>
  using std::auto_ptr;
# define THE_AUTO_PTR  auto_ptr
#endif

它適用於GCC和Microsoft的Visual Studio。 順便說一句, nullptr是一個關鍵字,無法測試 - 因此nullptr_t測試的原因。

暫無
暫無

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

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