Подтвердить что ты не робот

Почему 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 не может использоваться в таком очевидном случае?

4b9b3361

Ответ 1

В соответствии с на cppreference.com следующее преобразование доступно только с С++ 11:

Выражение интеграла, перечисления, указателя или указателя на член тип может быть преобразован в собственный тип. Полученное значение является одинаковым как значение выражения.

который не может быть реализован в Visual Studio 2013 RC.

Ответ 2

В стандарте С++ говорится (5.2.10.2) (выделено мной):

Оператор reinterpret_cast не должен отбрасывать константу (5.2.11). Выражение типа integer, enumeration, pointer или pointer-to-member может быть явно преобразовано в собственный тип; такой литой дает значение его операнда.

Итак, я бы сказал, что это ошибка.