What does the fpermissive flag do?

C++GccCompiler Options

C++ Problem Overview


I'm just wondering what the -fpermissive flag does in the g++ compiler? I am getting:

>error: taking address of temporary [-fpermissive]

which I can solve by giving the -fpermissive flag to the compiler.

EDIT: I just found what was causing the temporary address error part! I'm going to fix that part right now.

C++ Solutions


Solution 1 - C++

Right from the docs:

> -fpermissive
> Downgrade some diagnostics about nonconformant code from errors to warnings. > Thus, using -fpermissive will allow some nonconforming code to compile.

Bottom line: don't use it unless you know what you are doing!

Solution 2 - C++

The -fpermissive flag causes the compiler to report some things that are actually errors (but are permitted by some compilers) as warnings, to permit code to compile even if it doesn't conform to the language rules. You really should fix the underlying problem. Post the smallest, compilable code sample that demonstrates the problem.

> -fpermissive
> Downgrade some diagnostics about nonconformant code from errors to warnings. > Thus, using -fpermissive will allow some nonconforming code to compile.

Solution 3 - C++

When you've written something that isn't allowed by the language standard (and therefore can't really be well-defined behaviour, which is reason enough to not do it) but happens to map to some kind of executable if fed naïvely to the compiling engine, then -fpermissive will do just that instead of stopping with this error message. In some cases, the program will then behave exactly as you originally intended, but you definitely shouldn't rely on it unless you have some very special reason not to use some other solution.

Solution 4 - C++

If you want a real-world use case for this, try compiling a very old version of X Windows-- say, either XFree86 or XOrg from aboout 2004, right around the split-- using a "modern" (cough) version of gcc, such as 4.9.3.

You'll notice the build CFLAGS specify both "-ansi" and "-pedantic". In theory, this means, "blow up if anything even slightly violates the language spec". In practice, the 3.x series of gcc didn't catch very much of that kind of stuff, and building it with 4.9.3 will leave a smoking hole in the ground unless you set CFLAGS and BOOTSTRAPCFLAGS to "-fpermissive".

Using that flag, most of those C files will actually build, leaving you free to move on to the version-dependent wreckage the lexer will generate. =]

Solution 5 - C++

A common case for simply setting -fpermissive and not sweating it exists: the thoroughly-tested and working third-party library that won't compile on newer compiler versions without -fpermissive. These libraries exist, and are very likely not the application developer's problem to solve, nor in the developer's schedule budget to do it.

Set -fpermissive and move on in that case.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionmmirzadehView Question on Stackoverflow
Solution 1 - C++cli_hltView Answer on Stackoverflow
Solution 2 - C++David SchwartzView Answer on Stackoverflow
Solution 3 - C++leftaroundaboutView Answer on Stackoverflow
Solution 4 - C++breakpointView Answer on Stackoverflow
Solution 5 - C++Bob CramView Answer on Stackoverflow