А, что даёт *(float*)?
void*
, а чтобы начать с ним работать, его нужно привести, минимум, к адресу на переменную конкретного типа.(float*)
из void*
сделает float*
, а звезда слева - это разыменование указателя, в результате которого получается float&
. После этой легкой операции с памятью по адресу можно работать как с переменной типа float
.И как в данном случае должна выглядеть разметка?
И вот r-value на этот самый type и используется для инстанцирования вызовов с переданным к-value значением, а версия с l-value ссылкой на этот type используется для инстанцирования с l-value значением.
std::remove_reference
применяется только к параметру std::forward
и нужен для реализации одного конкретного случая. Тип результата у std::forward
все так же выводится с помощью reference collapse rule.Только целые, никаких user type.
constexpr
не больно-то больше свободы. constexpr
является рекомендацией, а не указанием. Рекомендация накладывает ограничения на код, но ничего не запрещает компилятору.constexpr
в рантайме. static constexpr const
.
Что именно "тоже самое" можно написать и в каком "методе"?