regex_token_iterator *it++ bug?
regex_token_iterator *it++ bug?
用于以下代码:
#include<iostream>
#include<regex>
using namespace std;
int main(int argc, char *argv[])
{
regex reg("/");
string s = "Split/Values/Separated/By/Slashes";
sregex_token_iterator it{std::begin(s), std::end(s), reg, -1};
sregex_token_iterator end;
while(it != end)
{
cout << *it++ << endl;
}
return 0;
}
应输出:
Split
Values
Separated
By
Slashes
但它输出的是:
Values
Separated
By
Slashes
主要代码可能有问题是*it++
,如果我写cout << *it << endl;++it;
,它可以正常工作。
当我将标准的c++11正则表达式更改为boost正则表达式时,*it++
也可以正常工作。
我已经检查了regex的头部,我认为operator++(int)
函数没有问题。
我的叮当版本是
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.0
Thread model: posix
有人有这样的问题吗?
叮当里有虫子吗?
我发现这是一个libc++实现错误。
转到regex,插入以下两行
regex_token_iterator operator++(int)
{
regex_token_iterator __t(*this);
std::cout << "test---" << *__t << "---test" << endl;
++(*this);
std::cout << "test---" << *__t << "---test" << endl;
return __t;
}
你发现*__t的值在++(*this)之后发生了变化!
进一步挖掘你会发现,
*__t实际上是通过返回内部value_type指针_result来实现的,而_result置->prefix(),这是match_results'_前缀对象的地址,该对象的地址从未更改,但其内容发生了更改。
相关文章:
- Clang bug?使用指针作为模板参数
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 为什么我会" void value not ignored as it ought to be"?
- 为什么当我为 for(auto& it : myUnorderedMap) {... = std::move(it.second)} 时,我会得到一个 const 引用?
- 类无法访问自己的私有静态 constexpr 方法 - Clang bug?
- Is it good to use SDL_PIXELFORMAT_UNKNOWN?
- 这在C++ "It does not own the underlying data, and so is cheap to copy or assign"中意味着什么
- C++:编译对无关派生类、bug或特性的函数调用
- QString::utf16(): Is it UB or not?
- 我正在"void value not ignored as it ought to be"我该怎么办?
- Microsoft VC++, vsnprintf, and Pipes (IO) Bug
- GotW #88 中的"It doesn’t work for references that are members of objects"是什么意思?
- Divide et impera sum of the elements of an array bug
- 如何使用set<pair<int,int> >::iterator itrator it迭代set<pair<int,int> >st中的值?
- 我正在用 c++ 制作一个小时钟,但遇到了"bug"或某种问题
- CMap with CArray Inside it
- 这个给定的代码应该将给定的数字转换为尽可能滞后的数字,no.by 用 9.It 替换合适的数字是行不通的
- 为什么在使用 auto&&it=--vec.end(),是 UB 时自动推导左值引用?
- Templated Variables Bug With Lambdas in Visual Studio?
- regex_token_iterator *it++ bug?