Windows版gcc4.4でC++0xのコードをコンパイルに`c++0x'だけではダメ


コンパイルオプションに`-std=c++0x'だけではダメで、`gnu++0x'も指定する必要があります。
(もしくは`gnu++0x'だけでも良いかもしれません。)

結論としては`-std=c++0x'ではなく、`-std=gnu++0x'を指定しなければいけません。


C++0xのコードをコンパイルするためのオプションとしては今のところ、
`-std=c++0x'と`-std=gnu++0x'があります。
`-std=c++0x'のみでコンパイルした場合、なんかをインクルードしていると

error: '::swprintf' has not been declared

なんて出てきます。
なので「-std=gnu++0x」オプションでコンパイルしてみると
コンパイルエラーがきれいになくなります。
ただ、この動作の理由は、/gcc/info/gcc.infoファイルの
`-std='オプション説明を読んでも書いてないなかったので
どうなってるのかは解りませんでした。
以下/gcc/info/gcc.infoの該当箇所を抜粋

`c++0x'
The working draft of the upcoming ISO C++0x standard. This
option enables experimental features that are likely to be
included in C++0x. The working draft is constantly changing,
and any feature that is enabled by this flag may be removed
from future versions of GCC if it is not part of the C++0x
standard.

`gnu++0x'
GNU dialect of `-std=c++0x'. This option enables experimental
features that may be removed in future versions of GCC.

`c++0x'はドラフト版のISO C++0x標準機能を有効にするオプションで、
`gnu++0x'は`-std=c++0x'の方言(別名でいいのかな?)オプション。
どちらも将来的には削除されるかもしれないオプションって書いてありますね。
/gcc/info/cpp.infoも見てみましたが

`__GXX_EXPERIMENTAL_CXX0X__'
This macro is defined when compiling a C++ source file with the
option `-std=c++0x' or `-std=gnu++0x'. It indicates that some
features likely to be included in C++0x are available. Note that
these features are experimental, and may change or be removed in
future versions of GCC.

`c++0x'または`gnu++0x'をつけると`__GXX_EXPERIMENTAL_CXX0X__'が
定義されるとしか書いてないです。
というわけで結論として今のところは面倒ですが
`c++0x'と`gnu++0x'のオプション両方を指定してコンパイルするのが
一番無難だと思います。



追記:nさんの指摘で一部内容を修正しました。