Ошибка: использование удаленной функции bool regex_match с gcc 5.2.0
Код, скомпилированный с 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)){index=fabs(index);}
Часть кода, который выдает ошибку:
bool negative_flag=false;
std::regex re("-[^-]*");
std::smatch result;
if(std::regex_match(toString(index),result,re)){index=fabs(index);}
Ошибка в строке 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.
i.e говорит, что regex_match
больше не разрешает временные строки (которые в этом случае возвращаются из функции toString()
) с match_results. Итак, что-то вроде этого решило проблему:
std::string tmps=toString(index);
if(std::regex_match(tmps,result,re)){index=fabs(index);}