Utilizzo Visual Studio 2013 per lo sviluppo, che utilizza la v12 degli strumenti di compilazione C++ di Microsoft.
Il seguente codice viene eseguito bene, la stampa "foo" per la console:Perché la funzione regex_match di C++ richiede che la stringa di ricerca sia definita al di fuori della funzione?
#include <regex>
#include <iostream>
#include <string>
std::string get() {
return std::string("foo bar");
}
int main() {
std::smatch matches;
std::string s = get();
std::regex_match(s, matches, std::regex("^(foo).*"));
std::cout << matches[1] << std::endl;
}
// Works as expected.
Lo stesso codice, con la stringa "s" sostituito per la funzione "get()", lancia una "stringa iteratori incompatibile" errore in fase di esecuzione:
#include <regex>
#include <iostream>
#include <string>
std::string get() {
return std::string("foo bar");
}
int main() {
std::smatch matches;
std::regex_match(get(), matches, std::regex("^(foo).*"));
std::cout << matches[1] << std::endl;
}
// Debug Assertion Failed!
// Expression: string iterators incompatible
Questo non ha senso per me. Qualcuno può spiegare perché questo accade?
Funziona per me, ma ci sono in effetti due sovraccarichi per lvalue e rvalue 'string's ... forse uno di questi è collegato a una vostra implementazione? – Columbo
Stai usando gcc? O una diversa implementazione regex? Ho provato questo con l'anteprima di Visual Studio 2015, che utilizza v14 degli strumenti del compilatore e si verifica lo stesso errore. – slbelden