Mehrdeutiger Aufruf von abs
Ich habe einen benutzerdefinierten Datentyp, der in der Praxis entweder @ sein kanfloat
oderdouble
. Mit Ausnahme von OSX kann ich auf jedem Betriebssystem diese C ++ 11-Vorlage erfolgreich erstellen:
#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;
}
Clang 6.0 (3.5 LLVM) meldet jedoch einen mehrdeutigen Funktionsaufruf. Wenn ich @ ändeabs
zufabs
, der Fehler ist unter OSX behoben, aber jetzt wird auf meinem Linux-Clang, gcc und Visual Studio ein identischer Fehler angezeigt.
Fehler in Visual Studio mit Fabs:
349 error C2668: 'fabs' : ambiguous call to overloaded function
AKTUALISIERE
Dieses Beispiel wurde auf unseren OS X-Systemen kompiliert, obwohl imfasidentisches projekt gibt es nicht. Die Lösung beinhaltete<cstdlib>
explizit in der Quelle und nicht in einem anderen Header. Der Grund ist unklar, scheint aber darin zu liegen, dass xcode / clang unseren Header-Includes nicht richtig folgt.