Edited at

2013-10-03以前のGNU libstdc++ではC++11の正規表現は使えません

More than 5 years have passed since last update.

無題 1.png

regexヘッダファイルから利用できるstd::regex周辺のお話。

年に1回くらい「いや、もうそろそろ実装されてるだろ」という前提でstd::regexを使い始めてエラーでハマって1時間くらい調べて「このバージョンでも駄目なのかよ!」ということをやらかしています。

現象としては正しいと思われる正規表現を記述しているのに実行時に例外が投げられるということが発生します。この時点で「自分の使い方が間違っているのかな?」と疑うと無駄な調査を行うことになります。

使えないのにコンパイルできちゃうからたちが悪い・・・。

Ubuntuだと 13.04 のリポジトリにあるg++ 4.7では使えません。確認していませんがおそらく 13.10 でも駄目でしょう。


実装されたのは最近です

http://gcc.gnu.org/ から引用


C++11 support [2013-10-03]

Regular expression support in libstdc++-v3 is now available.



対処法

以下で対処してください。


  • gccの最新版を自分でインストールする。

  • ディストリビューションが配布しているものを使いたい場合は最新のものがくるまで待つ。

  • boostやPocoなどの実装を使用する。

コンパイル時でも実行時でも「not implemented」って表示してくれりゃいいのに・・・。