Why does abs(complex<int>) always return zero?
c++, complex-numbers, math, std, stl
Solution
According to the C++ ISO spec, §26.2/2:
The effect of instantiating the template `complex` for any type other than `float`, `double` or `long double` is unspecified.
In other words, the compiler can do whatever it wants to when you instantiate `complex<int>`. The fact that you're getting 0 here is perfectly well-defined behavior from a language perspective.
For a comparison - on ideone's version of gcc, this code doesn't even compile. That's another perfectly valid option.
Hope this helps!
Problem
The following code with VS2010 prints `0`, contrary to my expectations: ``` #include <complex> #include <iostream> using namespace std; int main(void) { complex<int> z(20, 200); cout << abs<int>(z) << endl; return 0; } ``` It works fine when the type is `double`.