Trass3r wrote:
> Even typedef implicitly converts in one of the directions. `typedef' is or will be disallowed in D because of reasons I do not understand. In C and C++ their existence introduce problems because they increase the amount of parsing passes. > A named enum is a separate type with a finite set of allowed > values defined by the user. A) Both wrong according to the currently published reference: 1) "The enum EnumTag declares a new type, and all the EnumMembers have that type.", i.e. it is the tag not the hole enum that produces a new type. 2) "Enum declarations are used to define a group of constants.", i.e. only some of the valid values of the basetype are given names. All of the valid values of the basetype are also valid in the type declared by the tag. 3) "An EmptyEnumBody signifies an opaque enum - the enum members are unknown", i.e. none of the valied values of the basetype has got a name, but all valid values of the basetype are also valid in the type declared by the tag. B) It is somehow difficult to write about the reference because the use of the terms declaration, definition or declaration follows rules, which I have not yet detected. I use "declaration" for any entity, which is undefined at the current position of reading _and_ will be defined after that position is passed. This is often an identifier in D. I use "definition" for any entity, which represents the content of the transition from undefined to defined. This is often a type in D. I use "specification" for those two entities, which represents a binding between a declaration and a definition. This is often the absence of operators in D. -manfred