Date: Thu, 31 Oct 2019 10:23:25 -0400
On Thu, Oct 31, 2019 at 10:14 AM connor horman via Std-Proposals <
std-proposals_at_[hidden]> wrote:
> I propose to allow reinterpret_cast from pointer to integral, as well as
> the no-op/identity reintepret_cast in constant expressions. This particular
> version is useful in implementing hashcode algorithms at compile time, and
> to my knowledge bit_cast does not work for pointer types at compile time.
>
I think this is a non-starter. Consider:
// https://godbolt.org/z/Xd48ZV
const int i = 42;
constexpr int is_64_aligned(const int *p) {
return reinterpret_cast<intptr_t>(p) % 64 == 0;
}
constexpr bool x = is_64_aligned(&i);
int main(int argc, char **argv) {
bool y = is_64_aligned(argc ? &i : nullptr);
assert(x == y);
}
How is the compiler supposed to know *at compile time* what bits are in the
runtime bit-pattern of `p`?
–Arthur
std-proposals_at_[hidden]> wrote:
> I propose to allow reinterpret_cast from pointer to integral, as well as
> the no-op/identity reintepret_cast in constant expressions. This particular
> version is useful in implementing hashcode algorithms at compile time, and
> to my knowledge bit_cast does not work for pointer types at compile time.
>
I think this is a non-starter. Consider:
// https://godbolt.org/z/Xd48ZV
const int i = 42;
constexpr int is_64_aligned(const int *p) {
return reinterpret_cast<intptr_t>(p) % 64 == 0;
}
constexpr bool x = is_64_aligned(&i);
int main(int argc, char **argv) {
bool y = is_64_aligned(argc ? &i : nullptr);
assert(x == y);
}
How is the compiler supposed to know *at compile time* what bits are in the
runtime bit-pattern of `p`?
–Arthur
Received on 2019-10-31 09:26:02