2011-01-17 77 views
10

Các mã sau đây:C++ 0x regex trong GCC

#include <regex> 
using namespace std; 

(snippage) 

regex_search(s, m, re); 

công trình trong Microsoft C++, nhưng GCC 4.4.3 cung cấp cho các thông báo lỗi sau:

/usr/include/C++/4.4/tr1_impl/regex: 2255: cảnh báo: hàm inline '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) [với _Bi_iter = __gnu_cxx :: __ normal_iterator, std :: a llocator>>, _Allocator = std :: cấp phát, std :: cấp phát>>>>, _Ch_type = char, _Rx_traits = std :: regex_traits]' được sử dụng nhưng không bao giờ được xác định

Tất nhiên nó sẽ không ngạc nhiên cho tôi nếu regex chỉ đơn giản là một trong những tính năng C++ 0x vẫn còn trên danh sách việc cần làm cho GCC, nhưng những gì tôi đang gãi đầu của tôi là, trong trường hợp đó, tại sao nó vui vẻ đưa chỉ thị bao gồm, khai báo biến vv và chỉ có chuyến đi qua cuộc gọi hàm (mà nó thậm chí có vẻ hiểu).

Có điều gì tôi thiếu không?

+0

Bạn đang biên soạn với '-std = C++ 0x'? – ismail

+0

Có. Dường như vấn đề là regex chỉ được triển khai một phần. – rwallace

+1

bạn có thể sử dụng để thay thế. –

Trả lời

15

Thư viện regex hầu như không được triển khai trong libstdC++ lên đến nhánh 4.8.

Phiên bản 4.9 trở lên đã thực hiện <regex>.

+0

Đây là liên kết đến dự án C++ 0x bao gồm tất cả các phiên bản của gcc và trạng thái hỗ trợ của chúng. http://gcc.gnu.org/projects/cxx0x.html – slm

+5

['' hiện được triển khai dưới dạng GCC 4.9] (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631#c17) – JohnCand

0

Đối với g ++, biên dịch với cờ "-std = C++ 0x"

+1

Điều này sẽ chỉ hoạt động đối với các phiên bản của gcc có tính năng được triển khai. Ví dụ tôi đã cố gắng sử dụng std :: basic_regex nhưng không có triển khai thực hiện chức năng này trong gcc 4.4 và 4.5. – slm