2011-10-17 9 views
7

Reemplazando boost::regex con std::regex ya que estamos usando gcc 4.6 en la compañía me encontré con un problema con el método empty() de esa clase, básicamente no pasó de boost::regex a la clase std::regex. No estoy seguro de si esto es un problema de gcc o este método no lo convirtió en el estándar C++ 11 en absoluto, pero ese fragmento de código dependía mucho de esta característica. Entonces, la pregunta es: ¿hay alguna forma en C++ 11 std::regex para verificar si alguna vez se estableció la expresión o debo mantener el boost::regex por el resto de mi vida?boost :: regex vs std :: regex - no se puede encontrar el método empty()?

+0

No está en C++ 11 ... – PlasmaHH

+0

@PlasmaHH: ¿De verdad? Yo pensé que sí. Está en MSVC, wikipedia lo menciona también aquí - http://en.wikipedia.org/wiki/C%2B%2B11#Regular_expressions ¿Por lo tanto, finalmente no llegó al estándar de última hora? –

+1

@VladLazarenko Estoy mirando N3290 y no puedo encontrarlo. – pmr

Respuesta

10

empty() ha sido eliminado de std::regex hace mucho tiempo. N1507 (2003-09-16) fue el documento original que sugiere su eliminación (busque "¿Qué es una expresión regular no válida/vacía?"). Este problema fue dirigido a lo que entonces era std::tr1:regex. Se registró en las listas de problemas de LWG tr1 como el número 7.28 y contenía la siguiente resolución:

Discutido en Kona. El LWG acepta que el constructor predeterminado debería ser equivalente a la construcción de una cadena vacía. Dejando esto abierto por ahora, en parte porque necesitamos una expresión que exprese eso, y en parte porque no está claro que haya algún punto para tener el miembro vacío() en primer lugar.

N1711 (2004-11-04) fue el primer borrador de TR1 que carece de basic_regex::empty(). A partir de ahí, se importó de TR1 a C++ 11 sin más discusión.