signaturer を使用した C++11 関数を考えるとstd::regex_match(
std::string const&, std::smatch& match, std::regex const& re )
、最初の引数の有効期間に対する制約は何ですか? 何も見つかりませんが、次のプログラムを実行すると (VC++ 2010 でコンパイルされ、反復子のデバッグがアクティブになります):
int
main()
{
std::string a("aaa");
std::string c("ccc");
std::regex re("aaa(.*)ccc");
std::smatch m;
if (std::regex_match(a + "xyz" + c, m, re)) {
std::cout << m[0] << std::endl;
std::cout << m[1] << std::endl;
}
return 0;
}
sub_match
inm
はイテレータを文字列に保持するだけで、コピーは保持しないため、間違いなくクラッシュします。私のコードを禁止する標準には何も見つかりません。
FWIW: では機能しませんでした。boost::regex
それ
std::regex
がベースになっています。(もちろん、Boost は寿命に関する制約も文書化していません。)
最後に、私の質問は、DR を標準化団体に送るか、バグ レポートを Microsoft に送るかということだと思います。