Con Mingw 4.7.2, ho una libreria che non si compila a causa di una chiamata a isnan
. Il compilatore dice "tutto andrà bene" se uso std::isnan
e in effetti riesco a compilare il mio file.Isnan è nello std :: namespace? Più in generale, quando è std: necessario, facoltativo o da evitare?
Ma se controllo here (Edit: ma forse avrei dovuto controllare anche here :-)), il std::
non sembra essere necessario. Se lo aggiungo, il file sarà portatile?
Più in generale, per ogni caso esiste un modo generale per capire quando è necessario inserire std::
(per la portabilità), facoltativo o da evitare?
Modifica
Infatti tra le origini del problema è che ci sono più inclusioni di intestazione, e alcune delle intestazioni inclusi comprendono <cmath>
, mentre questo file cpp cerca di includere <math.h>
(quando <cmath>
è già stato incluso).
Non controllare lì, controllare [qui] (http://en.cppreference.com/w/cpp/numeric/math/isnan). –
@ChristianRau Fondamentalmente in C++ 98 questo non esisteva, e si poteva avere solo prendendo a prestito da C! Interessante! – Antonio
No, è sempre stato così com'è. Quel collegamento semplicemente dovrebbe mostrarti che c'è un grande 'std ::' davanti al nome della funzione. Per coincidenza quella particolare funzione 'isnan' è supportata solo con C++ 11 e non esisteva affatto in C++ 98 (nemmeno nell'intestazione C, che era l'intestazione C89/90 e non l'intestazione C99 che C++ 11 usi). Quindi in un modo si potrebbe prendere in prestito da C, ma non dalla C inclusa in C++, ma da un C99 reale (anche se dovrebbe essere uno strano mix allora). –