あらまし
3年ぶりくらいに、C++で正規表現を使用したくなってCloud9で環境用意して試してみたらエラーを投げられた。
テスト方法
Is this C++11 regex error me or the compiler?
test.cpp
#include <iostream>
#include <regex>
using namespace std;
int main()
{
regex r1("S");
printf("S works.\n");
regex r2(".");
printf(". works.\n");
regex r3(".+");
printf(".+ works.\n");
regex r4("[0-9]");//<-ここで「what(): regex_error」とか怒られる
printf("[0-9] works.\n");
return 0;
}
どうやら、g++が4.8とかだとこうなるらしい。
修正方法
Ubuntu 14.04 に GCC 4.9 をインストールする
# PPAの追加
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
# パッケージのインストール
sudo apt-get update
sudo apt-get install g++-4.9
# update-alternatives の導入
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20
sudo rm /usr/bin/cpp
sudo update-alternatives --install /usr/bin/cpp cpp /usr/bin/cpp-4.8 10
sudo update-alternatives --install /usr/bin/cpp cpp /usr/bin/cpp-4.9 20
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
sudo update-alternatives --set cc /usr/bin/gcc
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
sudo update-alternatives --set c++ /usr/bin/g++
詳しい所までは調べていないが、とりあえずこれで通るようになった。
感想
3年前に手元のMacで動いてたソースが動かないとか、意外とバージョンアップがのんびりしているものなんだな。