It is a static error to declare a variable of an empty type. Every expression has a statically-determined type, which contains every value that the expression can produce. The type of a designator is the type of the variable it produces. Assignability and type compatibility are defined in terms of a single syntactically specified subtype relation with the property that if T is a subtype of U , then every member of T is a member of U . The subtype relation is reflexive and transitive.
Every expression has a unique type, but a value can be a member of many types.
The type constructors and subtyping rules are discussed below.