2009.06.23
gccにおけるstd::tr1::regex
とあるプログラムで,C++からregexを使いたい状況が発生.boostにあるのは知っているけど,出来るだけboostを使わないコーディングをしているので,あれこれ調査していたら,tr1に盛り込まれる予定だったことを思い出す.
Visual Studio 2008 SP1では,tr1のサポートが追加され,すんなりregexが使えるようになっている.コードはこんな感じ.すごく便利.
#include < iostream>
#include < regex>
int main(int argc, char *argv[])
{
std::tr1::regex rx("abc");
std::cout
<< "search(\"abcabc\", \"abc\") == "
<< std::boolalpha << regex_search(std::string("abcabc"), rx)
<< std::endl;
return 0;
}
g++ではtr1のヘッダファイルはtr1というディレクトリに入っているので,<tr1/regex>をインクルードするようにプログラムを変更したら,コンパイルは通るものの,結果がおかしい.上のサンプルコードを動かしたみたら,見事にfalseを返してくれる.
libstdc++のドキュメントを調べて見たら,現状ではtr1のregexはlibstdc++でサポートされていないらしい.この地雷を踏んで余計な時間を使ってしまった.当面はboostと両刀使いで行くしか無いかないが,下手にコンパイルが通るだけに,configureで判別するのが面倒くさい.