struct wrapper
{
wrapper(CodeToken::List::iterator _it) : it(_it) {}
CodeToken::List::iterator it;
~wrapper()
{
std::cout << "call destructor" << std::endl;
}
};
std::vector<ParserError> es = { {
CompileErrorType::Parser_NoMoreToken,
*wrapper(tokens.begin()).it,
"expect token but no more token found"
} };
在vs上面写代码发现了一个crash的bug。查了一天最后竟然给我发现了vs的一个bug,就是vector这么初始化的话,里面wrapper(tokens.begin())
这个临时对象的析构函数竟然没有被编译器调用!不会有"call destructor"
输出出来!
编译器是vs2013的cl。