On 5/14/15 6:12 AM, Jacob Carlborg wrote:
On 2015-05-14 00:55, Steven Schveighoffer wrote:
enforce is one of the most needless pieces of phobos:
enforce(cond, message);
vs.
if(!cond) throw new Exception(message);
And the second doesn't mess up inlining.
I think enforce could be boiler-plated better. The only verbose part of
the if version is the throwing and newing.
template throe(Etype = Exception)
{
void throe(Args...)(Args args, string file = __FILE__, size_t line =
__LINE__)
{
throw new Etype(args, file, line);
}
}
if(!cond) throe(message);
Now you're back to the same problem as "enforce" has. That it throws
Exception by default. It shouldn't have a default value for the
exception type.
Sure, but I wasn't arguing about that. I just don't like the utility of
enforce completely -- it provides very little value, and kills inlining.
BTW, it could be called "raise" as it's called in some other languages.
My symbol wasn't intended as a proposal, just something that sounds like
"throw" but without using the keyword :) raise would be fine.
Wait, you're in an io package, and you want to always throw IO
exceptions?
alias except = throe!IOException;
if(!cond) except(args, to, ioexception);
That is a bit better but I still think that IOException is too generic.
Streaming something over the network and trying to open a file is quite
different.
It was just an example, you can use whatever exception you want.
-Steve