Some compilers (e.g. GCC 9) don't much like the preprocessor directives, and other compilers (e.g. Intel ifort 18) are only conditionally fine.
There are two issues:
#ifdef REAL32; fparser_rk = real32 This could be fragile if the preprocessor is case insensitive (i.e. fparser_rk = REAL32 instead), which might lead to "recursion detected" compilation errors. It might be better to use something along the lines of #ifdef SINGLE or #ifdef PARSER_32 instead.
#ifdef REAL32; #elif REAL64 is fragile. Some compilers are conditionally fine if REAL32 has a value (e.g. #define REAL32 REAL32 instead of just #define REAL32). Other compilers don't really like that structure at all. It'd be more broadly compatible to do something like #if defined(REAL32); #elif defined(REAL64) instead.
Some compilers (e.g. GCC 9) don't much like the preprocessor directives, and other compilers (e.g. Intel ifort 18) are only conditionally fine.
There are two issues:
#ifdef REAL32; fparser_rk = real32This could be fragile if the preprocessor is case insensitive (i.e.fparser_rk = REAL32instead), which might lead to "recursion detected" compilation errors. It might be better to use something along the lines of#ifdef SINGLEor#ifdef PARSER_32instead.#ifdef REAL32; #elif REAL64is fragile. Some compilers are conditionally fine ifREAL32has a value (e.g.#define REAL32 REAL32instead of just#define REAL32). Other compilers don't really like that structure at all. It'd be more broadly compatible to do something like#if defined(REAL32); #elif defined(REAL64)instead.