Quando si utilizza la variante double
della funzione std::abs()
senza std
con g ++ 4.6.1, non viene visualizzato alcun avviso o errore.Evitare problemi del compilatore con abs()
#include <algorithm>
#include <cmath>
double foobar(double a)
{
return abs(a);
}
Questa versione di g ++ sembra essere tirando in double
variante abs()
nel namespace globale attraverso una delle comprende da algorithm
. Sembra che ora sia consentito dallo standard (vedere questo question), ma non richiesto.
Se compilo il codice sopra utilizzando un compilatore che non tirare il double
variante abs()
nel namespace globale (ad esempio g ++ 4.2), quindi viene segnalato il seguente errore:
warning: passing 'double' for argument 1 to 'int abs(int)'
Come posso forza g ++ 4.6.1, e altri compilatori che estraggono funzioni nello spazio dei nomi globale, per dare un avvertimento in modo da poter evitare errori quando usato con altri compilatori?
Cosa c'è di sbagliato con l'utilizzo di 'std :: abs' se questa è la funzione che ti serve? –
@JonathanLeffler Niente, ma può essere facile perderselo per errore. Non voglio che lo slip vada inosservato e causa problemi di compilazione con altri compilatori. –