私のコードは次のとおりです。
#include <cmath>
#include <iostream>
float foo(float f) {
std::cout << "float\n";
return f;
}
double foo(double d) {
std::cout << "double\n";
return d;
}
int main() {
int i = 16;
// foo(i); // ambiguous call, of course
return (int) std::sqrt(i);
}
最後の行の呼び出しは、を使用してもあいまいであるとは報告され-pedantic -std=c++98 -Wall -Wextra
ませんが、同じ理由で他のコンパイラでは必ずしも機能しないためfoo(i)
です。
gccは名前空間に以下を追加しますstd
:
template<typename _Tp>
inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
sqrt(_Tp __x)
{ return __builtin_sqrt(__x); }
つまり、inline double sqrt(X)
すべての整数型Xを追加します。
g ++が私とすべてを助けるために最善を尽くしていることに感謝しますが、コードのバグを診断するための(正当な)方法はありますか?
[編集:私はgcc 4.3.4を使用していますが、他のバージョンのgccで診断できる場合は、その事実にも興味があります!]