linuxでregex_matchするとuse of deleted functionって怒らっれる。
次のようなc++例題がコンパイルできません。
#include <iostream>
#include <regex>
int main(int argc, char* argv[]){
using namespace std;
smatch sm;
cout << regex_match(string("hahaha"), sm, regex("(ha){3}")) << endl;
return 0;
}
Mac OS X 10.9 + clang++ またはwindows + cygwin + gcc 4.9 では上の例はちゃんとコンパイルされ、予測している結果の1を出力します。
しかし、linuxでgccを使ってコンパイルすると何故か次のように怒られます。
foo.cpp: In function ‘int main(int, char**)’:
foo.cpp:13:61: error: use of deleted function ‘bool std::regex_match(const std::basic_string<_Ch_type, _Ch_traits, _Ch_alloc>&&, std::match_results<typename std::basic_string<_Ch_type, _Ch_traits, _Ch_alloc>::const_iterator, _Alloc>&, const std::basic_regex<_Ch_type, _Rx_traits>&, std::regex_constants::match_flag_type) [with _Ch_traits = std::char_traits<char>; _Ch_alloc = std::allocator<char>; _Alloc = std::allocator<std::sub_match<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char> > > >; _Ch_type = char; _Rx_traits = std::regex_traits<char>; typename std::basic_string<_Ch_type, _Ch_traits, _Ch_alloc>::const_iterator = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char> >]’
cout << regex_match(string("hahaha"), sm, regex("(ha){3}")) << endl;
^
In file included from /usr/include/c++/5.1.0/regex:61:0,
from foo.cpp:6:
/usr/include/c++/5.1.0/bits/regex.h:2073:5: note: declared here
regex_match(const basic_string<_Ch_type, _Ch_traits, _Ch_alloc>&&,
^
コンパイル環境は Arch GNU/Linux で、gccヴァージョンは5.1です。
私が見る限りでは例のソース自体は問題がないように見えます。
ただ、ソースのsmをcmatchに変え、文字列をstringでなくc_strにすればコンパイルされますが、私はc_strよりstringが使いたいです。