2015-08-23 4 views
10

Der mit GCC kompilierten Code 4.9.2, ohne auch nur irgendeine Warnung, zeigt jedoch die folgenden Fehler in GCC 5.2.0:Fehler: Verwendung von gelöschten Funktion bool regex_match mit 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);} 

Stück Code das ist zu werfen den Fehler:

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

der Fehler ist in der if Linie. Was könnte das verursachen?

Antwort

14

Irgendwie habe ich es gelöst. Ich fand diese Zeilen in 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. 

heißt es sagt regex_match nicht mehr temporäre Strings erlaubt (die von toString() Funktion in diesem Fall zurückgeführt wird) mit match_results. So etwas wie dies das Problem gelöst:

std::string tmps=toString(index); 
if(std::regex_match(tmps,result,re)){index=fabs(index);} 
+2

Der entsprechende Mängelbericht bei http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2329 ist. –

Verwandte Themen