错误:在 gcc 5.2.0 中使用已删除的函数 bool regex_match

Posted

技术标签:

【中文标题】错误:在 gcc 5.2.0 中使用已删除的函数 bool regex_match【英文标题】:error: use of deleted function bool regex_match with gcc 5.2.0 【发布时间】:2015-08-23 08:04:12 【问题描述】:

使用 GCC 4.9.2 编译的代码甚至没有任何警告,但在 GCC 5.2.0 中显示以下错误:

error: use of deleted function ‘bool std::regex_match(const std::__cxx11::basic_string<_Ch_type, _Ch_traits, _Ch_alloc>&&, std::__cxx11::match_results<typename std::__cxx11::basic_string<_Ch_type, _Ch_traits, _Ch_alloc>::const_iterator, _Alloc>&, const std::__cxx11::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::__cxx11::sub_match<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > >; _Ch_type = char; _Rx_traits = std::__cxx11::regex_traits<char>; typename std::__cxx11::basic_string<_Ch_type, _Ch_traits, _Ch_alloc>::const_iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >]’
     if(std::regex_match(toString(index),result,re))negative_flag = true;

抛出错误的一段代码:

bool negative_flag=false;
std::regex re("-[^-]*");
std::smatch result;
if(std::regex_match(toString(index),result,re))negative_flag = true;

错误在if 行中。这可能是什么原因造成的?

【问题讨论】:

【参考方案1】:

我解决它的任何方式。我在regex.h 中找到了这些行:

  // _GLIBCXX_RESOLVE_LIB_DEFECTS
  // 2329. regex_match() with match_results should forbid temporary strings
  /// Prevent unsafe attempts to get match_results from a temporary string.

即它说 regex_match 不再允许带有 match_results 的临时字符串(在这种情况下从 toString() 函数返回)。所以这样的事情解决了这个问题:

std::string tmps = toString(index);
if(std::regex_match(tmps,result,re))negative_flag = true;

【讨论】:

相关缺陷报告在open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2329。

以上是关于错误:在 gcc 5.2.0 中使用已删除的函数 bool regex_match的主要内容,如果未能解决你的问题,请参考以下文章

C++ 在 GCC 上使用已删除的函数,但在 MSVC 上没有

学习c++:错误:使用已删除函数

gcc 警告:已使用但未定义的函数

错误:使用已删除的函数 'ClassName::ClassName(const ClassName&)'

防止 GCC LTO 删除函数

C语言 文件方面 段错误 核心已转储 以及字符串查找删除的问题