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.
According to the C++ ISO spec, §26.2/2:
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!