error: more than one instance of overloaded function "isnan" matches the argument list
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.
Comments (6)
-
-
reporter 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?
-
uh there may be a way around. Though it would require that we added extra
#ifdef
to the code and the point of this was more or less to not have those around anymore.Nope, no luck. I took a look at the ticket where this was initial discussed: https://bitbucket.org/einsteintoolkit/tickets/issues/2407/cactus-math-work-arounds-break-carpetx#comment-61718642 and keeping workarounds was considered optional and since we never ran into issues on “supported” clusters they were not implemented.
I think you may stand a good chance asking the admins to install a newer gcc for you since gcc 4.X is really very old. In particular if you can point them to the Intel docs stating that g++'s STL is needed for icpc (see eg https://www.intel.com/content/www/us/en/developer/articles/release-notes/c-compiler-190-for-linux-release-notes-for-intel-psxe-2019.html#sysreq for intel 2019 and its requirements).
If all else fails, you can also compile your own g++ and use that. Usually following the instructions at https://gcc.gnu.org/install/download.html , https://gcc.gnu.org/install/configure.html , and https://gcc.gnu.org/install/build.html (very carefully! note the
build
directory and thecontrib/download_prerequisites
script) works (it will take a while though) and afterwards you can pass the-gxx-name <path-to-g++>
option toicpc
to make it use the new stdc++ library.You can also experiment with using
spack
to installgcc
(which is easier, but just as slow). https://spack-tutorial.readthedocs.io/en/latest/tutorial_basics.html
-
I am proposing an automated test (and thus better error message) for this in #2663. Feel free to review.
-
-
- changed status to resolved
- Log in to comment
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. Herepath-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.