Почему reinterpret_cast не конвертирует int в int?
Мой компилятор - это последний VС++ 2013 RC.
void f()
{
int n1 = 0;
int n2 = reinterpret_cast<int>(n1); // error C2440
}
ошибка C2440: 'reinterpret_cast': невозможно преобразовать из 'int' в 'int'
Почему reinterpret_cast не может использоваться в таком очевидном случае?
Ответы
Ответ 1
В соответствии с на cppreference.com следующее преобразование доступно только с С++ 11:
Выражение интеграла, перечисления, указателя или указателя на член тип может быть преобразован в собственный тип. Полученное значение является одинаковым как значение выражения.
который не может быть реализован в Visual Studio 2013 RC.
Ответ 2
В стандарте С++ говорится (5.2.10.2) (выделено мной):
Оператор reinterpret_cast не должен отбрасывать константу (5.2.11). Выражение типа integer, enumeration, pointer или pointer-to-member может быть явно преобразовано в собственный тип; такой литой дает значение его операнда.
Итак, я бы сказал, что это ошибка.