В С++ 11 выражение constexpr
не может содержать повторные интерпретации. Так, например, если вы хотите манипулировать битами числа с плавающей запятой, скажем, чтобы найти мантиссону числа:
constexpr unsigned int mantissa(float x) {
return ((*(unsigned int*)&x << 9) >> 9);
};
Приведенный выше код не будет constexpr
. Теоретически я не вижу, как реинтерпрет в этом или подобном случае может быть любым, отличным от арифметических операторов, но не соответствует ему (и стандарту).
Есть ли какой-нибудь умный способ обойти это ограничение?