Remix.run Logo
grandempire a day ago

That’s for C++. And how is std::variant implemented?

LowLevelMahn a day ago | parent [-]

not using a union: https://ojdip.net/2013/10/implementing-a-variant-type-in-cpp... because the union can't be extended with variadic template types

LegionMammal978 a day ago | parent | next [-]

Actually, it does use a union, in both libstdc++ [0] and libc++ [1]. (Underneath a lengthy stack of base classes, since it wouldn't be C++ if it weren't painful to match the specified semantics.)

[0] https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libstdc%2B%2B-v3...

[1] https://github.com/llvm/llvm-project/blob/llvmorg-20.1.3/lib...

grandempire a day ago | parent | prev [-]

So instead it has a buffer large enough to hold all the types? That’s what union does.

Still waiting to hear the security concerns.