>From what I understood, typedef is going to be replaced by a templated structure and handle type conversion in that way. This is understandable because 1) the keyword was easily confused with C++ typedef, whose role was taken in D by alias (which is a much less misleading keyword for what it does) and 2) as it was, typedef was of questionable use (not being able to choose which casts are permitted removed it of any practicality).
What I'm wondering is if it wouldn't have helped to enhance it rather than simply remove it. Let us consider this hypothetical syntax: typedef MyType real : in(float,double,real), out(real); It would read "MyType is mapped from real. Only a float, a double or a real may cast to MyType. MyType may only cast to real." This would allow all specified casts to be statically checked by the compiler. Of course, one could also apply this syntax to structs or classes, in which case the compiler could verify for existing opCast()() or single-argument constructors between types, and reject the definition otherwise. The shorter version: typedef MyType real : float, double, real; would mean that MyType accepts casts from the listed types, but may not be cast to another type, and the simplest version: typedef MyType real; would be have the same meaning as the deprecated typedef statement. What do you think?
