On Friday, March 29, 2013 22:46:27 Steven Schveighoffer wrote:
> The issue is when you think you are invoking the opCast operator, but you
> inadvertently end up casting using the compiler's type-bypassing version.
> I agree the opCast call is safe, it's that its name coincides with the
> "throw all typechecks away" operator.

I'd have to experiment to see exactly what is and isn't accepted, but in my 
experience, the compiler rarely allows casting to or from structs without 
opCast (the same with classes except for the inheritance tree). So, I really 
don't think that there's much risk of accidentally using a cast on a user-
defined type and have it use the built-in cast operator.

> I don't think to should ignore opCast, or not use it, but there should be
> a way to hook 'to' without using opCast.  And most types should prefer
> that.

I really just don't see a problem here. If opCast is defined, it's perfectly 
safe regardless of what would happen if you tried to cast without opCast being 
defined. It's also the language-defined way to do type conversions. And I 
really 
don't see any need to use anything else to make std.conv.to work. By using 
opCast, there's a standard way to define type conversion, and there's a 
standard way for it to hook into std.conv.to, which seems way better to me 
than trying to support every which way that a particular programmer wants to 
try and define a conversion function. Clearly, you think that using opCast is a 
problem, but I just don't agree. It's safe; it's standard; and it works.

- Jonathan M Davis

Reply via email to