Hallo,
ich habe mir gerade die Templates angeschaut und bin dann nebenbei auf eine Frage bezüglich der abs-Funktion aus cstdlib gestoßen. Die Funktion ist nach Cpp reference nur für integrale Datentypen definiert. Mein Code sieht jetzt wie folgt aus
Das für mich nicht nachvollziehbare ist, dass der Code ein richtiges Ergebnis liefert. Ich kann die Argumente beim Funktionsaufruf vertauschen und das Ergebnis der Funktion ist auch richtig. Wie kann es sein, da die abs-Funktion aus cstdlib nur für integrale Datentypen definiert ist? Im spazialisierten Template bin ich (die entsprechende Funktion wird vom Compiler erzeugt), da ich die Ausgabe auf der Konsole erhalte. Ich nutze den GCC mit dem C++14 Standard.
ich habe mir gerade die Templates angeschaut und bin dann nebenbei auf eine Frage bezüglich der abs-Funktion aus cstdlib gestoßen. Die Funktion ist nach Cpp reference nur für integrale Datentypen definiert. Mein Code sieht jetzt wie folgt aus
C++:
#include <iostream>
#include <cstdlib>
template <typename T>
bool kleiner(const T& a, const T& b) {
return a < b;
}
template <>
bool kleiner<double>(const double& a, const double& b) {
std::cout << "Drin im spezialisierten Template\n\n";
return std::abs(a) < std::abs(b);
}
std::cout << (kleiner(10.4,10.5) ? 10.4 : 10.5);
Das für mich nicht nachvollziehbare ist, dass der Code ein richtiges Ergebnis liefert. Ich kann die Argumente beim Funktionsaufruf vertauschen und das Ergebnis der Funktion ist auch richtig. Wie kann es sein, da die abs-Funktion aus cstdlib nur für integrale Datentypen definiert ist? Im spazialisierten Template bin ich (die entsprechende Funktion wird vom Compiler erzeugt), da ich die Ausgabe auf der Konsole erhalte. Ich nutze den GCC mit dem C++14 Standard.