3

I'm trying to use regex in C++. The following is my code:

#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<regex>
using namespace std;

int main(int argc, char** argv) {
    string A = "Hello!";
    regex pattern = "(H)(.*)";
    if (regex_match(A, pattern)) {
        cout << "It worked!";
    }
    return 0;
}

But I'm encountering this error :

In file included from /usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/regex:35:0,
                 from main.cpp:12:
/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/bits/c++0x_warning.h:31:2: error: #error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.

How can this be solved and what is wrong?

Deanie
  • 2,316
  • 2
  • 19
  • 35
Enigman
  • 640
  • 3
  • 9
  • 21

3 Answers3

6

and must be enabled with the -std=c++0x or -std=gnu++0x compiler options

Add one of those options, -std=c++0x or -std=gnu++0x, to your compiler command:

g++ -std=c++0x ...

Note if std::regex is not supported see boost::regex for an alternative.

hmjd
  • 120,187
  • 20
  • 207
  • 252
2

It looks like you are trying to use the regex class, which is part of the new C++11 standard, but not telling the compiler to compile to that standard.

Add -std=c++0x to your compiler flags and try again.

EDIT : As the gcc implementation status page shows, the regex support in gcc is far from complete. So even adding the right flag wont help yet. If you need regex support, you could try boost.

Tom Macdonald
  • 6,433
  • 7
  • 39
  • 59
2

Simply just add

g++ -std=gnu++0x <filename.cpp>

or

g++ -std=c++0x <filename.cpp>

It will work properly

Artjom B.
  • 61,146
  • 24
  • 125
  • 222
abhisek
  • 337
  • 1
  • 3
  • 11