Question: I was trying to compile the code below (from <https://stackoverflow.com/a/478960/683218>).
The compile went OK, if I compile with 

```
$ g++ test.cpp

```

but went wrong when the `-std=c++11` switch is used:

```
$ g++ -std=c++11 test.cpp
test.cpp: In function 'std::string exec(char*)':
test.cpp:6:32: error: 'popen' was not declared in this scope
     FILE* pipe = popen(cmd, "r");
                                ^

```

Any idea what's going on? 

(I am using mingw32 gcc4.8.1 from mingw.org, and on WindowsXP64)

Code: 

```
#include <string>
#include <iostream>
#include <stdio.h>

std::string exec(char* cmd) {
    FILE* pipe = popen(cmd, "r");
    if (!pipe) return "ERROR";
    char buffer[128];
    std::string result = "";
    while(!feof(pipe)) {
        if(fgets(buffer, 128, pipe) != NULL)
            result += buffer;
    }
    pclose(pipe);
    return result;
}

int main() {}

```

Answer: 
I think this happens because `popen` is not standard ISO C++ (it comes from POSIX.1-2001).

You could try with:

```
$ g++ -std=c++11 -U__STRICT_ANSI__ test.cpp

```

(`-U` cancels any previous definition of a macro, either built in or provided with a `-D` option)

or

```
$ g++ -std=gnu++11 test.cpp

```

(GCC [defines](https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html) `__STRICT_ANSI__` if and only if the `-ansi` switch, or a `-std` switch specifying strict conformance to some version of ISO C or ISO C++, was specified when GCC was invoked)

Playing with the `_POSIX_SOURCE` / `_POSIX_C_SOURCE` macros is a possible alternative (<http://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html>).
Just add this at the begining:

```
extern "C" FILE *popen(const char *command, const char *mode);

```