>From: "David Abrahams" <[EMAIL PROTECTED]>
> "Edward Diener" <[EMAIL PROTECTED]> writes:
>
> >> I browsed the article (I confess to not having read everything, so
> >> please correct any misapprehensions).  My sense is that the technique
> >> is oriented towards detecting programmer errors and responding via an
> >> exception.
> >
> > I don't think ENFORCE is oriented toward that at all. There's no
orientation
> > involved other than to throw an exception based on a condition. I agree
with
> > you that direct programming errors should generally not throw exceptions
but
> > should ASSERT so that the programmer can fix the error. However I don't
> > think ENFORCE has anything to do with this debate about when to ASSERT
and
> > when to throw exceptions. Perhaps the examples give the impression which
you
> > have
>
> I think so.
>
> > but I think the problem is just choosing better examples in which
> > one would want to throw an exception and not a technical issue as to
> > the benefits of using ENFORCE in order to simplify exception
> > throwing.
>
> Can you show me a better example?  This is not a challenge.  Really,
> if this ENFORCE idea is a useful one I want to understand it.

I think something like:

template<class T>
inline T& Enforce( T& obj, const char* msg ) {
    assert( !!obj, msg );
    return obj;
}

(also it's const equivalent...not shown)

now you can do the same sort of thing as mentioned in the article

Enforce(cout) << Enforce(MakeWidget())->ToString();

I would think that the compiler could optimize away the Enforce calls with
NDEBUG defined, but when not defined it will catch NULL derefs as the author
intended.

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to