jeudi 1 septembre 2016

Why doesn't clang warn about implicit conversion from double to int, but do it when from long to int?

In the following code:

#include <iostream>
int main()
{
  const long l = 4294967296;
  int i = l;
  return i; //just to silence the compiler
}

the compiler warns about implicit conversion (using -Wall and -std=c++14) as following:

warning: implicit conversion from 'const long' to 'int' changes value from 4294967296 to 0 [-Wconstant-conversion]

which is ok. But there is no warning if the conversion is from double to int, as in the following code:

#include <iostream>
int main()
{
  const double d = 4294967296.0;
  int i = d;
  return i; //just to silence the compiler
}

Why the compiler reacts differently in these situations?

Note: clang version is 3.6.2-svn240577-1~exp1

Aucun commentaire:

Enregistrer un commentaire