Рассмотрим следующую программу:
struct A{}; int main() { A a; A b = a; A c = reinterpret_cast<A>(a); }
Компилятор (g ++ 14) выдает ошибку о invalid cast from type 'A' to type 'A'. Почему приведение к тому же типу недопустимо?
invalid cast from type 'A' to type 'A'
Это не разрешено, потому что стандарт говорит так.
Существует довольно ограниченный набор разрешенных преобразований, которые вы можете делать с reinterpret_cast. Смотрите, например, cppreference . Например, первая точка в списке:
reinterpret_cast
1) Выражение целочисленного типа, перечисления, указателя или указателя на член может быть преобразовано в его собственный тип. Результирующее значение совпадает со значением выражения. (начиная с C ++ 11)
Однако приведение собственного типа (без указателя!) к себе отсутствует в списке. Зачем ты это делаешь?
reinterpret_cast должен использоваться для указателей, ссылок и целочисленных типов.
Я не знаю, почему кто-то это делает.
Но все же вы хотите сделать. Вы можете делать как.
A *d = reinterpret_cast<A*>(&a);
или
A c = reinterpret_cast<A&>(a);
Поскольку reinterpret_cast нельзя использовать для классов и структур, его следует использовать для переинтерпретации указателей, ссылок и целочисленных типов. Это очень хорошо объяснено в cpp reference
Итак, в вашем случае одно из возможных допустимых выражений будет reinterpret_cast<A*>(&a)
reinterpret_cast<A*>(&a)