2011-01-17 22 views
10

El siguiente código:C++ 0x expresiones regulares en GCC

#include <regex> 
using namespace std; 

(snippage) 

regex_search(s, m, re); 

funciona en Microsoft C++, pero GCC 4.4.3 da el mensaje de error:

/usr/include/C++/4.4/tr1_impl/expresiones regulares: 2255: aviso: función en línea 'bool std :: regex_search (_Bi_iter, _Bi_iter, std :: match_results < _Bi_iter, _Allocator> &, const std :: basic_regex < _Ch_type, _Rx_traits> &, std :: regex_constants :: match_flag_type) [con _Bi_iter = __gnu_cxx :: __ normal_iterator, std :: a llocator>>, _Allocator = std :: asignador, std :: asignador>>>>, _Ch_type = char, _Rx_traits = std :: regex_traits]' usado pero nunca definido

Por supuesto que no me sorprendería si regex fuera simplemente una de las características de C++ 0x que aún están en la lista de tareas pendientes para GCC, pero en lo que me estoy rascando es en ese caso, ¿por qué se toma felizmente la directiva de inclusión, las declaraciones de variables, etc. y solo tropieza con la llamada a la función (que incluso parece entender).

¿Hay algo que me falta?

+0

¿Estás compilando con '= -std C++ 0x'? – ismail

+0

Sí. Parece que el problema es que regex solo se está implementando en parte por el momento. – rwallace

+1

puede usar en su lugar. –

Respuesta

15

La biblioteca de expresiones regulares no se implementó en su mayoría en libstdC++ hasta la rama 4.8.

Las versiones 4.9 y posteriores tienen <regex> implementado.

+0

Aquí hay un enlace al proyecto C++ 0x que cubre todas las versiones de gcc y sus estados de soporte. http://gcc.gnu.org/projects/cxx0x.html – slm

+5

['' ahora se implementa a partir de GCC 4.9] (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631#c17) – JohnCand

0

Para g ++, compilar con la bandera "= -std C++ 0x"

+1

Esto solo funcionará para las versiones de gcc que tengan la característica implementada. Por ejemplo, estaba tratando de usar std :: basic_regex pero no hay implementación detrás de esta función en gcc 4.4 y 4.5. – slm

Cuestiones relacionadas