<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>はらぺこ日誌 &#187; GCC</title>
	<atom:link href="https://blog.harapeko.jp/tag/gcc/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.harapeko.jp</link>
	<description>株式会社はらぺこ 公式ブログ</description>
	<lastBuildDate>Mon, 30 Oct 2017 14:32:56 +0000</lastBuildDate>
	<language>ja</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.9.2</generator>
	<item>
		<title>char32_t だと regex が使えない</title>
		<link>https://blog.harapeko.jp/2010/09/22/u32regex-bad-cast/</link>
		<comments>https://blog.harapeko.jp/2010/09/22/u32regex-bad-cast/#comments</comments>
		<pubDate>Wed, 22 Sep 2010 02:21:44 +0000</pubDate>
		<dc:creator><![CDATA[村山 俊之]]></dc:creator>
				<category><![CDATA[技術メモ]]></category>
		<category><![CDATA[Boost]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[C++0x]]></category>
		<category><![CDATA[GCC]]></category>
		<category><![CDATA[iconv]]></category>
		<category><![CDATA[otoco]]></category>
		<category><![CDATA[Unicode]]></category>

		<guid isPermaLink="false">http://blog.harapeko.jp/?p=133</guid>
		<description><![CDATA[C++0x では UCS に対応し、専用の型やリテラルの記法が導入されました。その関係で、以下の点について調査 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>C++0x では UCS に対応し、<a href="http://ja.wikipedia.org/wiki/C%2B%2B0x#.E6.96.B0.E3.81.9F.E3.81.AA.E6.96.87.E5.AD.97.E5.88.97.E3.83.AA.E3.83.86.E3.83.A9.E3.83.AB" title="新たな文字列リテラル - C++0x - Wikipedia">専用の型やリテラルの記法が導入されました</a>。その関係で、以下の点について調査を行っていました。</p>
<ol>
<li>C++0x で UCS を UTF-32 として扱う型 <code>char32_t</code>, <code>u32string</code> およびリテラル <code>U"..."</code> と、 libiconv の UCS-4-INTERNAL との間に互換性はあるか。</li>
<li>C++0x で新たに追加された正規表現ライブラリ <code>&lt;regex&gt;</code> は利用可能か。</li>
<li><code>&lt;regex&gt;</code> が利用できない場合、 Boost.Regex を用いて UTF-32 文字列を処理することは可能か。</li>
</ol>
<p>これらの調査は、すべて otoco のコアデータを扱うプログラム内で内部文字列に UTF-32 を採用することを前提としたものでした。<br />
<span id="more-133"></span><br />
結論から言うと、<strong>内部文字列に UTF-32 を採用することは、現時点では諦めざるを得ない、ということになりました。＼(^O^)／</strong> 以下、その解説です。</p>
<p>1 については、互換性に問題がないことを確認しました。</p>
<p>2 についてですが、 GCC 4.5 の標準 C++ ライブラリでは、 <code>&lt;regex&gt;</code> のヘッダファイルは存在するものの、ライブラリの実体がまだ用意されていない、という状態のようでした。</p>
<p>で、 3 についてなのですが… 簡単のため、以下のサンプルを見てみることにします。</p>
<pre>
#include &lt;string&gt;
#include &lt;boost/regex.hpp&gt;

using namespace std;

typedef boost::basic_regex&lt;char32_t, boost::regex_traits&lt;char32_t&gt; &gt; u32regex;
typedef boost::match_results&lt;u32string::const_iterator&gt; u32smatch;

int main()
{
	u32string text(U&quot;C++0x のせかいへようこそ!!&quot;);
	u32string modified;
	u32regex reg(U&quot;せかい&quot;);
	u32smatch match;
	while (boost::regex_search(text, match, reg)) {
		modified += match.prefix().str() + U&quot;世界&quot;;
		text = match.suffix().str();
	}
	modified += text;
	return 0;
}
</pre>
<p>このサンプルは、期待通りに動作しても、何もしません。UTF-32 の文字列 <code>U"C++0x のせかいへようこそ!!"</code> の <code>U"せかい"</code> を <code>U"世界"</code> に置換する、という処理を内部で行うだけです。 <code>u32string</code> に対応した <code>iostream</code> があったとして、 UTF-32 をそのままコンソールやファイルに出しても不親切なだけなので、出力までやるなら libiconv と組み合わせるべきですが、プログラムが複雑になるので、ここではそこまで示していません (実際にはそこまで試そうとしていたのですが…)。</p>
<p>で、このプログラム、実際はどうなるのかというと、 GCC 4.5 でコンパイルは通るものの、実行すると、 <strong><code>u32regex</code> オブジェクト</strong> (これは <code>boost::basic_regex&lt;char32_t, boost::regex_traits&lt;char32_t&gt; &gt;</code> のシノニムですね) <strong>のコンストラクタが <code>std::bad_cast</code> 例外を送出します</strong>。どうやら、 Boost.Regex は <code>char32_t</code>、すなわち 32bits 以上の整数型を文字コードに使用するということ、を想定した作りにはなっていなかったようなのです。よーするに <code>char</code> と <code>wchar_t</code> しか想定していなかったんですね (ん? でも <a href="http://blog.harapeko.jp/2009/07/25/wchar_t-suck/" title="はらぺこ日誌» ブログアーカイブ » 頼りなさげな wchar_t">GCC の <code>wchar_t</code> は <code>uint32_t</code></a> だったような…)。</p>
<p>GCC の標準 C++ ライブラリが <code>&lt;regex&gt;</code> のライブラリを実装するのを悠長に待っても居られないので、方針を転換し、内部文字列は UTF-8 で実装せざるを得なさそうです。一応、UTF-8 は文字の先頭オクテットか否かを判断するのが容易なので (0&#215;80≦n≦0xBF 以外なら先頭オクテット)、文字境界の特定も文字数カウントも一度関数を書いてしまえば ok なのですが…。</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.harapeko.jp/2010/09/22/u32regex-bad-cast/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>MinGW のインストール方法がガラッと変わっていた (と思ったら元に戻っていた?) 件</title>
		<link>https://blog.harapeko.jp/2010/09/02/mingw-install/</link>
		<comments>https://blog.harapeko.jp/2010/09/02/mingw-install/#comments</comments>
		<pubDate>Wed, 01 Sep 2010 16:19:54 +0000</pubDate>
		<dc:creator><![CDATA[村山 俊之]]></dc:creator>
				<category><![CDATA[技術メモ]]></category>
		<category><![CDATA[GCC]]></category>
		<category><![CDATA[MinGW]]></category>
		<category><![CDATA[otoco]]></category>

		<guid isPermaLink="false">http://blog.harapeko.jp/?p=123</guid>
		<description><![CDATA[メインマシンではなくノートパソコンの方にも MinGW を入れていたはずなのですが、何故か msys.bat  [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>メインマシンではなくノートパソコンの方にも MinGW を入れていたはずなのですが、何故か <code>msys.bat</code> が消えていたりとなんだかいろいろと崩壊していたので、この際だからと最新の物をインストールすることにしました。</p>
<p>ところが、MinGW の<a href="http://sourceforge.net/projects/mingw/files/" title="Browse MinGW - Minimalist GNU for Windows Files on SourceForge.net">ダウンロードサイト</a>にて「Download Now!」と書かれたリンクボタンをクリックすると、インストーラの exe ファイルではなく、何故か zip ファイルがダウンロードされ、展開すると謎のディレクトリ構成が…。<br />
<span id="more-123"></span><br />
試しに生成された <code>bin</code> ディレクトリ下の <code>mingw-get.exe</code> ファイルをダブルクリックしてみますが、一瞬コマンドプロンプトが表示されるだけで、何も行われません。こいつはいったい何なのか?</p>
<p>ぐぐってみたところ、MinGW ポータルの <a href="http://www.mingw.org/wiki/Getting_Started">Getting Started</a> ページに行き当たりました。どうやら、上記で落としてきたファイルを <code>C:\MinGW</code> ディレクトリ下に展開し、 <code>C:\MinGW\bin</code> ディレクトリを環境変数 <code>PATH</code> に追加した上で、コマンドプロンプトから</p>
<pre>
mingw-get install パッケージ名 [パッケージ名 ...]
</pre>
<p>とタイプすれば、お好みのパッケージのみをダウンロードし、よしなにインストールしてくれる、という物なのでした。 <code>install</code> コマンドの他、<code>update</code> コマンドや <code>upgrade</code> コマンドも用意されているので、言わば <code>apt-get</code> の MinGW 版、といったところでしょうか。</p>
<p>ただ、こいつを使ってインストールされる GCC が、 Getting Started のページでは 3.x 系であるとされていたのですが、実際には 4.5.0 がインストールされるようです (9/5 追記: すでにこの記述も 4.5 に修正されているようですね)。前回メインマシンに入れた GCC は 4.4.0 でしたが、 4.4.0 では <code>&lt;unorderd_map&gt;</code> を利用するコードをコンパイルするのに <code>-std=gnu++0x</code> オプションが必要であったのに対し、 4.5.0 では <code>-std=c++0x</code> オプションでもコンパイルできてしまったりと、早くも微妙な相違点を見つけてしまい、どっちで統一すべきか迷ってみたり…</p>
<p>なお、 <code>mingw-get</code> コマンドが知らないオプションを渡そうとした場合 (例えば、<code>mingw-get install gcc</code> とタイプしようとして、誤って <code>mingw-get gcc</code> などとタイプしてしまった場合)、深刻なエラーとやらが発生し、何故か <code>mingw-get</code> コマンドを実行できない状態になってしまうようです。その場合は、<code>C:\MinGW\bin\mingw-get.exe~</code> ファイルを <code>mingw-get.exe</code> に、 <code>C:\MinGW\libexec\mingw-get\mingw-get-0.dll~</code> ファイルを <code>mingw-get-0.dll</code> に、それぞれリネームしてあげて下さい。それで再び使えるようになるはずです。</p>
<p>それから、必要な追加ライブラリの類は、相変わらず手動でインストールした方が良さそうです。 libiconv をインストールしようとしたのですが、 mingw-get でインストールできるのは <code>msys-libiconv</code> というやつだけで、これだとどういう訳か MSYS 上ですらそのままではコンパイルできなかったりするので (コンパイル時にヘッダファイルのディレクトリとライブラリのディレクトリを指定し、実行時に DLL があるディレクトリのパスを通してやればよいのですが…面倒だし)。</p>
<hr />
2010年  9月  5日 日曜日 17:29:19 JST &#8211; <strong>追記</strong></p>
<p>今し方<a href="http://sourceforge.net/projects/mingw/files/" title="Browse MinGW - Minimalist GNU for Windows Files on SourceForge.net">ダウンロードサイト</a>を覗いてみたところ、 Inno Setup によるインストーラが復活しているようです。但し、以前までのインストーラとは若干毛色が違うようで、内部で mingw-get を利用する Web インストーラ的なものになっています。</p>
<p>インストーラは mingw-get-inst という名前で、現在「Download Now!」ボタンはこのインストーラにリンクしています。インストール方法は、基本的にはインストーラの exe ファイルを実行し、ひたすら Next ボタンを押し続けるだけです。但し、インストールする構成を指定する画面で、インストールしたいコンポーネントをいくつか選ぶ必要があります。</p>
<p>私の場合ですが、とりあえず C++ 言語は利用したいので、「C++ Compiler」にチェックを入れました。</p>
<div id="attachment_126" style="width: 513px" class="wp-caption alignnone"><img src="http://blog.harapeko.jp/wp-content/uploads/2010/09/mingw-get-inst-fig01.png" alt="mingw-get-inst による MinGW セットアップ(1) - C++ 言語を利用する場合" title="mingw-get-inst による MinGW セットアップ(1) - C++ 言語を利用する場合" width="503" height="385" class="size-full wp-image-126" /><p class="wp-caption-text">mingw-get-inst による MinGW セットアップ(1) - C++ 言語を利用する場合</p></div>
<p>さらに、 MSYS も使いたいので、ツリーコントロールをスクロールし、一番下にある「MSYS Basic System」にもチェックを入れました。</p>
<div id="attachment_127" style="width: 513px" class="wp-caption alignnone"><img src="http://blog.harapeko.jp/wp-content/uploads/2010/09/mingw-get-inst-fig02.png" alt="mingw-get-inst による MinGW セットアップ(2) - MSYS を利用する場合" title="mingw-get-inst による MinGW セットアップ(2) - MSYS を利用する場合" width="503" height="385" class="size-full wp-image-127" /><p class="wp-caption-text">mingw-get-inst による MinGW セットアップ(2) - MSYS を利用する場合</p></div>
<p>インストーラは mingw-get をインストールし、この mingw-get を利用して GCC や MSYS などのコンポーネントをダウンロードし、インストールしてくれるようです。ちなみに、コントロールパネルからアンインストールを行うと、 mingw-get のみが削除されるようで、 mingw-get によってインストールされたそれ以外のプログラムはそのまま残るようです。</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.harapeko.jp/2010/09/02/mingw-install/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MinGW に GCC 4.4.0 を導入する</title>
		<link>https://blog.harapeko.jp/2010/08/31/mingw-gcc44/</link>
		<comments>https://blog.harapeko.jp/2010/08/31/mingw-gcc44/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 23:17:13 +0000</pubDate>
		<dc:creator><![CDATA[村山 俊之]]></dc:creator>
				<category><![CDATA[技術メモ]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[C++0x]]></category>
		<category><![CDATA[GCC]]></category>
		<category><![CDATA[MinGW]]></category>
		<category><![CDATA[otoco]]></category>

		<guid isPermaLink="false">http://blog.harapeko.jp/?p=115</guid>
		<description><![CDATA[otoco のコアデータの仕様がだいぶ形になってきたので、いよいよ実装を開始しました。本当はメインマシンに L [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>otoco の<a href="http://developer.harapeko.jp/trac/original/otoco/wiki/%E5%A4%96%E9%83%A8%E4%BB%95%E6%A7%98/%E3%82%B3%E3%82%A2%E3%83%87%E3%83%BC%E3%82%BF">コアデータの仕様</a>がだいぶ形になってきたので、いよいよ<a href="http://developer.harapeko.jp/trac/original/otoco/ticket/6" title="#6 (コアデータクラスを実装する) – otoco">実装を開始しました</a>。本当はメインマシンに Linux 環境を整え直してそっちで開発を進めたいのですが、現状お金をもらってメインでやらせて頂いている仕事が Windows 環境での開発なので、並行して作業を行いやすいよう、 Windows 向けのバイナリを生成する環境として検討している <a href="http://www.mingw.org/">MinGW</a> を導入し、とりあえずはこちらで開発を進めてみることにしました。<br />
<span id="more-115"></span><br />
まだビルドが通る状態ですらないので、とりあえずミニマムケースでテストコードを書きながら、手探り状態で実装を進めているのですが、はて、 <code>int32_t</code> などの型の <code>typedef</code> が定義されている <code>stdint.h</code> の C++ 版である <code>&lt;cstdint&gt;</code> を使う場合、これらの型名は <code>std::int32_t</code> になるのやら、それとも <code>::int32_t</code> になるのやら、どっちだったかなぁと思い、テストプログラムに</p>
<pre>
#include &lt;cstdint&gt;
</pre>
<p>と書いてみたものの、これがさっぱり通らない。おおそうか、そもそも <code>&lt;cstdint&gt;</code> なんて存在しないのか、などと Twitter で<a href="http://twitter.com/T_MURACHI/status/22237400924" title="Twitter / T.MURACHI: うは、 cstdint って存在しないのか。(←超初 ...">つぶやいてみました</a>ところ、ご親切な方から VC10 (<a href="http://www.microsoft.com/japan/visualstudio/" title="Microsoft Visual Studio 2010 - Visual Studio 2010 オフィシャル サイト">Visual Studio 2010</a> の C/C++ コンパイラのことですね) にはありますよ、との<a href="http://twitter.com/cpp_akira/statuses/22237455915" title="Twitter / Faith and Brave: VC10にはありますね。 RT @T_MURACHI ...">お返事</a>が。</p>
<p>さらにもう一つ気がかりなことに、 hashmap 的なものってもう標準化されていなかったかなぁと思いつつ調べてみたところ、 C++0x であれば <code>std::unordered_map</code> が使えると言うことが分かったので、早速これも試してみようとテストプログラムに</p>
<pre>
#include &lt;unordered_map&gt;
</pre>
<p>と書いてみたところ、やっぱりこれもさっぱり通らない。で、どちらも MinGW のインストールディレクトリ以下にヘッダファイルが存在するのか検索してみると、なるほど確かにファイル自体が存在しない。</p>
<p>そもそも GCC は C++0x に対応しているのか? と調べてみると、軽くぐぐってみた限りでもバージョン 4.4 および 4.5 で C++0x への対応を改善したとのニュース記事が見つかるので、おそらくは 4.x 系であれば対応を進めてはいるんだろうなぁと言うことは伺えるわけです。</p>
<p>MinGW は割と最近導入したので、まさか古い GCC が採用されているなどとは疑いもしていなかったのですが、ここで念のためにとバージョンを確かめてみると、なんと<strong>デフォルトでインストールされている GCC のバージョンは 3.4.5</strong> だというじゃないですか。</p>
<p>まさか MinGW 版の GCC が 3.4.5 で開発が止まっているなどとはさすがに思えなかったので、早速 4.x 系にバージョンアップする方法はないかと調べてみたところ、なんのことはない、 MinGW の<a href="http://sourceforge.net/projects/mingw/files/" title="Browse MinGW - Minimalist GNU for Windows Files on SourceForge.net">ダウンロードサイト</a>に普通に用意されていて、それを展開して上書きインストールすれば済む話だったのでした (やり方の詳細は<a href="http://developer.harapeko.jp/trac/original/otoco/wiki/%E6%8A%80%E8%A1%93%E3%83%A1%E3%83%A2/MinGW%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97" title="技術メモ/MinGWセットアップ – otoco">技術メモ</a>をご参照のこと)。</p>
<p>これでいよいよ <code>&lt;cstdint&gt;</code> も <code>&lt;unordered_map&gt;</code> も使える! ということで、早速以下のようなテストプログラムを書いてみました。</p>
<pre>
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;unordered_map&gt;
#include &lt;cstdint&gt;

int main()
{
	std::unordered_map&lt;std::string, std::string&gt; murachi;
	murachi[&quot;name&quot;] = &quot;Toshiyuki Murayama&quot;;
	murachi[&quot;handle&quot;] = &quot;T.MURACHI&quot;;
	murachi[&quot;age&quot;] = &quot;32&quot;;
	
	std::cout &lt;&lt; &quot;I'm &quot; &lt;&lt; murachi[&quot;handle&quot;] &lt;&lt; &quot;(&quot; &lt;&lt; murachi[&quot;name&quot;] &lt;&lt; &quot;), &quot; &lt;&lt;
		murachi[&quot;age&quot;] &lt;&lt; &quot; years old.&quot; &lt;&lt; std::endl;
	
	std::int32_t hoge = 12345;
	std::cout &lt;&lt; &quot;hoge = &quot; &lt;&lt; hoge &lt;&lt; std::endl;
	
	return 0;
}
</pre>
<p>これを <code>test.cpp</code> という名前で保存し、コンパイルを試みますが…</p>
<pre>
murachi@YUMA ~
$ g++ -o test test.cpp
c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/unordered_map:35 ､ｫ､・include
､ｵ､・ｿ･ﾕ･｡･､･・・ﾂｿｽﾅ include ､ｫ､鬢ﾎﾊﾝｸ釥ｬﾍｭｱﾗ､ﾈ､ﾊ､・ﾇ､ｷ､遉ｦ:
,
                 test.cpp:3 ､ｫ､・ISO C ､ﾇ､ﾏﾌｾﾁｰ､ﾄ､ｭｲﾄﾊﾑｰ惞ﾞ･ｯ･惕ｷ､ﾞ､ｻ､・IS
O C99 ､ﾏｻﾈﾍﾑ､ｵ､・・ﾙ､ｭｻﾄ､熙ﾎ､ﾎｰ惞ﾗｵ皃ｷ､ﾞ､ｹ:
c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/c++0x_warning.h:31:2: error: #
error This file requires compiler and library support for the upcoming ISO C++ s
tandard, C++0x. This support is currently experimental, and must be enabled with
 the -std=c++0x or -std=gnu++0x compiler options.
test.cpp: In function 'int main()':
test.cpp:8: error: 'unordered_map' is not a member of 'std'
test.cpp:8: error: expected primary-expression before ',' token
test.cpp:8: error: expected primary-expression before '&gt;' token
test.cpp:8: error: 'murachi' was not declared in this scope

murachi@YUMA ~
$
</pre>
<p>なんだか文字化けしたエラーが出てきてしまいました。新しいバージョンの GCC はエラーを日本語で出してくれるのか? 何はともあれ、そのすぐ後ろに GCC のオプションに関するヒントが綴られていたので、「そうか C++0x 固有の機能を利用するには <code>-std=c++0x</code> オプションか <code>-std=gnu++0x</code> オプションのどっちかを指定してあげる必要があるんだな」と気づくことができました。</p>
<p>で、なんとなく <code>-std=c++0x</code> オプションの方がまだ標準っぽい感じがしたので、それを試してみたのですが、</p>
<pre>
murachi@YUMA ~
$ g++ -std=c++0x -o test test.cpp
In file included from c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/bits/pos
types.h:42,
                 from c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/iosfwd:4
2,
                 from c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/ios:39,
                 from c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/ostream:
40,
                 from c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/iostream
:40,
                 from test.cpp:1:
c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/cwchar:159: error: '::swprintf
' has not been declared
c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/cwchar:166: error: '::vswprint
f' has not been declared

murachi@YUMA ~
$
</pre>
<p>今度は <code>&lt;iostream&gt;</code> から巡り巡って参照されている <code>&lt;cwchar&gt;</code> の中で、存在しないシンボルが参照されようとしている、と怒られてしまいました。 <code>cwchar</code> ファイルの中も一応覗いてみましたが、これを書き換えてしまうのもよくないので、とりあえず一か八かでもう一つのオプション <code>-std=gnu++0x</code> を試してみることに。すると…</p>
<pre>
murachi@YUMA ~
$ g++ -std=gnu++0x -o test test.cpp

murachi@YUMA ~
$ ./test
I'm T.MURACHI(Toshiyuki Murayama), 32 years old.
hoge = 12345

murachi@YUMA ~
$
</pre>
<p>こんどはちゃんとコンパイルが通り、プログラムも期待したとおりに動作しました。</p>
<p>と、いうわけで、おさらいです。</p>
<ul>
<li>GCC のバージョンはちゃんと確認しよう。
<ul>
<li>特に、C++0x 固有の機能を用いるのであれば、 GCC 4.x 以降が必要になる。</li>
<li>クロスプラットフォーム対応を前提とする場合、対応予定の全ての環境で確認し、開発に用いる GCC のバージョンをプロジェクト内で決めてしまい、それを用いるよう徹底してしまった方がよいかも…。</li>
</ul>
</li>
<li>GCC で <code>&lt;unordered_map&gt;</code> などの C++0x 固有の機能を用いる場合、 <code>g++</code> コマンドにオプション <code>-std=gnu++0x</code> を付加する必要がある。
<ul>
<li>おそらく GCC 固有のオプションなので、 GCC 固有の機能を許可してしまっている可能性もある。 GCC 以外のコンパイラにも対応させたいのであれば、可搬性には特に注意する必要がある、かも知れない。</li>
</ul>
</li>
</ul>
<p>ちなみに、先ほどのサンプルプログラムは <code>&lt;unordered_map&gt;</code> と <code>&lt;cstdint&gt;</code> の両方をテストしていて、特に後者については以下のような記述で利用しているのですが、</p>
<pre>
	std::int32_t hoge = 12345;  // int32_t は std 名前空間に存在する
</pre>
<p>実際のところ、この記述は下記のように書き換えてもコンパイルは通ります。</p>
<pre>
	::int32_t hoge = 12345; // int32_t はグローバル名前空間にも存在する…!?
</pre>
<p>C++0x の仕様についてはまだちゃんと目を通していないので、どちらがより推奨されているのかは分かりません。この辺は後でちゃんと確認しておかねば…。</p>
<p>それから、そもそも C++0x には初期化リストなどの構文糖や型推論、ラムダ、Unicode 用の文字型と Unicode リテラル (UTF-32 リテラルと libiconv の UCS-4-INTERNAL って互換性あるのかなぁ…これも後で調べなきゃ…)、そしてタプルや正規表現 (<code>std::basic_regex</code>!!) などの追加ライブラリ群などなど…さまざまな機能の追加がなされているので、それらについても一通りさらうなり有用な書籍を探す (日本語の文献は…無いかなぁ…) なりしておかないとなぁとか思ったりするわけです (こうやってブログ記事にする為にちょっと <a href="http://ja.wikipedia.org/wiki/C%2B%2B0x" title="C++0x - Wikipedia">Wikipedia に目を通してみた</a>だけでもまぁいろいろと…また実装方針を考え直さないといけない部分も結構出てきてるなぁ… <tt>^_^;</tt>)。</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.harapeko.jp/2010/08/31/mingw-gcc44/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
