Ambigu appel à l'abs

J'ai un type de données personnalisé qui dans la pratique peut être float ou double. Sur tous les OS sauf OSX, je suis en mesure de réussir à construire ce C++11 modèle:

#include <cmath>
#include <cstdlib>
#include <cstdint>

template< class REAL_T >
inline REAL_T inhouse_abs(REAL_T i_val)
{
    return std::abs((REAL_T)i_val);
}

int main()
{
    int32_t ui = 2;
    inhouse_abs(ui);
    return 0;
}

Cependant, clang 6.0 (3.5 LLVM) les rapports de l'ambiguïté d'un appel de fonction. Si je change abs à fabs, l'erreur est résolue sur OSX, mais maintenant à l'identique d'erreur s'affiche sur mon Linux clang, gcc, et Visual Studio.

Erreur sur Visual Studio avec fab:

349 error C2668: 'fabs' : ambiguous call to overloaded function

Mise à JOUR

Cet exemple compilé sur nos systèmes OS X, bien que dans le près de identiques projet, il ne le fait pas. La solution a été notamment <cstdlib> explicitement dans la source, plutôt que dans un autre en-tête. La raison n'est pas claire, mais il semble être xcode/clang pas à la suite de notre en-tête comprend correctement.

Avez-vous l'erreur de texte?
Ajouté le Visual Studio erreur. Aurez besoin d'une minute pour trouver le cliquetis analogique.
L'erreur est généré à cette ligne sans appels nécessaires.
Donc, ce que les en-têtes sont vous, y compris etc....
Mis à jour avec exemple.

OriginalL'auteur EntangledLoops | 2015-05-06

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *