error: more than one instance of overloaded function "isnan" matches the argument list
Issue #2705 new
With ET_2022_11, I’m finding the following error on at least two different machines when using the intel compilers:
error: more than one instance of overloaded function "isnan" matches the argument list: function "isnan(double)" function "std::isnan(double)" argument types are: (double)
and an equivalent error for the “isinf” function. The error points to lines 220 and 228 in the file
cactustest/TestMath/src/math_cc.cc. If I comment lines 218-232 in this file (or prefix the the calls with
"std::") it seems to compile fine.
One machine where this happens is Marenostrum 4, but bizarrely, whether the error shows up or not, depends on which modules (and in which order) are loaded.
Cactus requires a C++ compiler with full C++11 support (http://einsteintoolkit.org/about/releases/ET_2022_05_announcement.html and http://einsteintoolkit.org/usersguide/UsersGuide.html#x1-15000B1.1). For gcc this means at least gcc 6. For Intel this means that you have to (if the admins failed to do so) point icpc to use an STL from a g++ (it uses GCC’s C++ library) using the
-gxx-name path-to-g++option. Here
path-to-g++must point to a compatible g++ that is at least version 6. Intel does not make it easy to find out which versions are supported (used to be in the compiler release notes but those are now next to impossible to find). Your best guess is to start with a the newest version of g++ and check of icpc outputs a warning (it does) that the version of g++ is too new. Then go back to the next older one offered by the cluster until you find one that works.
I see. On Marenostrum, I can indeed fix this by pointing to a suitable g++ version. On our local cluster, however, they only provide updated intel compiles and the gcc available is version 4. Is there anyway around this, or do I really need to ask the sysadmins to provide updated gcc compilers as well?