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

Reply via email to