On Thursday, February 02, 2012 10:36:06 Ali Çehreli wrote: > Just to be complete: You mean it for fundamental types. Of course user > types' opCast operators may throw: > > import std.exception; > > class C > { > int opCast(T : int)() const > { > enforce(false, "Not good."); > return 42; > } > } > > void main() > { > auto c = new C; > auto i = cast(int)c; > }
Very true. However, std.conv.to will use a user-defined opCast if there is one, and so it's generally better to use std.conv.to with user-defined opCasts than to cast explicitly. The risk of screwing it up is lower too, since then you don't have to worry about the built-in cast accidentally being used instead of your user-defined opCast if you screwed up - e.g. by declaring int opcast(T : int)() const { .. } Though in many cases, the compiler will still catch that for you (not all though). - Jonathan M Davis