This is called a variant record. It's similar to C++'s union, but it's not the same, so you can't confuse them and put them two in the same basket. Compare Wikipedia article about unions and variant records.