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

Reply via email to