4 ms·
I'm a junior in uni, and I hate it when I say "Yeah we learned this technique in the C class, but it's UB in C++ so please rewrite that" in reviewing friends' c
by hotjump 3y ago
I'm a junior in uni, and I hate it when I say "Yeah we learned this technique in the C class, but it's UB in C++ so please rewrite that" in reviewing friends' codes that do type-punning with unions.
So I'm also very happy with the 'std::bit_cast' in general.
BTW how about std::is_constant_evaluated()?
I assumed it would help folks who do heavy physics simulations, but looks like not listed in the article.
- flohofwoe 3y agoTBF, I have yet to see a C++ compiler where the union type punning trick doesn't work, there would be a lot of broken code if real-world compilers would change the current behaviour no matter what the standard says. Of course now that std::bit_cast exists it's the safe thing to do (but then there's still C code that's compiled in C++ mode which was even recommended by Microsoft because the Visual Studio team couldn't be bothered to keep their C compiler in shape until a little while ago).
- gumby 3y ago> I have yet to see a C++ compiler where the union type punning trick doesn't work The problem isn’t that compilers won’t implement the feature (that would take more work); the problem is that it’s processor-specific. The spec doesn’t mandate many specific bit-ordering layouts (some are, such two’s complement representation being mandated which was just added, &obj == &base, I think nullptr has to be 0, etc) rather than trying to make everything a PDP-11.
- anonymoushn 3y agoIn these cases using bit_cast or memcpy will also "break" though :(
- CamperBob2 3y agoThere would be a lot of broken code if real-world compilers would change the current behaviour no matter what the standard says GCC maintainers: Hold my Jolt
- aw1621107 3y agoFor those of us who aren't very familiar with what heavy physics simulations might involve, how would std::is_constant_evaluated() help?