Boost logo

Boost :

From: Beman Dawes (bdawes_at_[hidden])
Date: 2006-06-29 11:34:58


"John Maddock" <john_at_[hidden]> wrote in message
news:012c01c69900$308fd4a0$b10d1452_at_fuji...
> Jeff Garland wrote:
>> Well, you're assuming that report will be called in a destructor. If
>> it isn't and some sort of exception is thrown then the application
>> can't handle it because you've eaten it. You could always have 2
>> versions:
>>
>> void cpu_time_reporter::report_no_exceptions() throws()
>> void cpu_time_reporter::report()
>
> Or how about:
>
> void cpu_time_reporter::report(std::nothrow_t)throw() ?
>
> It's situations like this that we have std::nothrow for isn't it?
>
> Just a thought.

I'm going to refine and apply the error handling guidelines I posted a while
ago to cpu_timer/cpu_timer_reporter.

Your post gives me an idea for a further refinement:

There are three useful behaviors, depending on the app, for functions that
may encounter an operating system API error:

    1. Throw an exception.

    2. Report the error by setting a error_code & argument to the error
code.

    3. Ignore the error.

I suggest folding 2 and 3 into a single case by just proving (2), since the
caller is free to ignore whatever the error_code & gets set to, and that
effectively is the same as (3).

It is a bit inconvenient to use, because the users has to declare an
otherwise unneeded variable as the target for returning the error_code.

But suppose we provided:

    namespace boost { extern error_code nothrow; }

Then the user can get the effect of (3) by writing:

   boost::system::cpu_time_reporter tr( boost::nothrow );

--Beman

 


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk