未定义的行为或编译器错误? (标准:: sregex_token_iterator ::运算++)

时间:2015-02-14 23:28:32

标签: c++ linux c++11 gcc undefined-behavior

以下代码在两个系统上产生不同的输出,这两个系统都是英特尔Linux上的某种g ++ 4.9.2:

Ubuntu:gcc版本4.9.2(Ubuntu 4.9.2-0ubuntu1~14.04); 输出:2

ArchLinux:gcc版本4.9.2 20150204(预发布)(GCC); 输出:1

编译是例如 g ++ -std = c ++ 11 foo.cpp -o foo 。更改优化级别不会影响任一计算机上的结果。这里有某种未定义的行为,我没有看到或者某处有编译器/库错误吗?

#include <iostream>
#include <iterator>
#include <regex>

int main() {
  std::string string = "1 2 3";
  std::regex space_re("\\s+"); // whitespace
  std::sregex_token_iterator tokens(string.begin(), string.end(), space_re, -1);
  std::cout << ((tokens++)->str());
}

0 个答案:

没有答案