Это было частью решения DR 799 . Проблема заключалась в следующем:
В примечании к пункту 2 статьи 8.2.10 [expr.reinterpret.cast] говорится:
С учетом ограничений, приведенных в этом разделе,выражение может быть приведено к своему собственному типу с использованием оператора reinterpret_cast.
Однако в нормативном тексте нет ничего, что разрешало бы это преобразование, и пункт 1 запрещает любое преобразование, прямо не разрешенное.
Идея в примечании была сочтена целесообразной, reinterpret_cast
должно быть разрешено выполнять преобразование личности. Таким образом, был добавлен нормативный текст, о котором вы спрашиваете. Я могу предположить, что ограничение на некоторые фундаментальные типы является осторожным первым (и, может быть, даже единственным) шагом. Так как он не открывает банку с червями, связанную с типами классов и необходимостью вызывать их конструкторы. reinterpret_cast
- это не создание новых объектов, и это можно сделать с помощью фундаментальных типов. Не уверен, что то же самое относится к типам классов.