Enigman
Enigman

Reputation: 640

Regex in C++: Requires compiler support error

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?

Upvotes: 3

Views: 17249

Answers (3)

abhisek
abhisek

Reputation: 347

Simply just add

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

or

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

It will work properly

Upvotes: 2

Tom Macdonald
Tom Macdonald

Reputation: 6583

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.

Upvotes: 2

hmjd
hmjd

Reputation: 121971

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.

Upvotes: 6

Related Questions