(no title)
matthewkayin | 10 days ago
Doing so takes the same space as a bool, and could be wrapped in a class if desired to provide a nicer interface.
matthewkayin | 10 days ago
Doing so takes the same space as a bool, and could be wrapped in a class if desired to provide a nicer interface.
cataphract|10 days ago
What I was surprised with was that their union code was valid. I thought accessing a union member that was not active was valid in C, but not in C++.
matthewkayin|10 days ago
I am not a C++ expert, but I'm surprised to hear that it is considered UB to access the other member since as far as I can tell a union is just a chunk of memory that can be interpreted differently depending on which union member you access?
So, if you had a union { bool b, char c }, and you set b = false, then I would think that accessing c would predictably give you a value of '\0'.
Granted, you probably shouldn't go around accessing an inactive union member like that, but when people say it's UB they make it sound like it's impossible to guarantee what data will be inside that byte, and it seems to me like that isn't true.
IsTom|10 days ago
DaiPlusPlus|10 days ago
(for those wanting context, it's from this post from 2005: https://thedailywtf.com/articles/Classic-WTF-What-Is-Truth )
ephou7|10 days ago
I'm (fairly) sure there's a good reason for that language feature, but the justification the blog article gives is super weak.
tialaramex|10 days ago
The language is the problem, and WG21 hates fixing the language. The really bone headed stuff like "UB? in my Lexer?" got through as a language change and Barry has also had some success with "just fix it" language changes, that's what happened so that C++ can attempt what Rust's MaybeUninit<T> does, but mostly WG21 will take weird new intrinsics in the standard library, as here, over just fixing the programming language.
unknown|10 days ago
[deleted]