Are union/sum types another "basis"? Some languages include syntax for them at the level of structs, others require they be painfully hacked together out of libraries and template metaprogramming (std::variant, though bare unions exist without carrying a tag).