Boost logo

Boost :

From: Beman Dawes (bdawes_at_[hidden])
Date: 2003-08-05 10:18:29


At 05:23 PM 8/1/2003, David Abrahams wrote:
>
>Why aren't there constructors accepting an error_code in
>boost::fs::exception?
>
>I have some code which needs to throw an exception if
>!is_directory(some_path). I'd like to throw a not_a_directory
>filesystem exception (or one derived therefrom).
>
>Howto?

Seems like there should be additional constructors:

       filesystem_error(
         const std::string & who,
         const path & path1,
         error_code err_code );

       filesystem_error(
         const std::string & who,
         const path & path1,
         const path & path2,
         error_code err_code );

There are several issues:

* Instead of mapping a system error code into a generic error code, the
reverse will need to be done. This allows the error message mechanism to
work as if the system had reported the error.

* Having constructors which are distinguished only by one argument being of
type error_code or type int (for system specific error codes) may confuse
users. I don't see any way around that.

* If I was starting from scratch, I'd probably fold four constructors into
two by redoing the arguments for both the generic error code and system
specific error code like this:

       filesystem_error(
         int err_code,
         const std::string & who,
         const path & path1,
         const path & path2 = "" );

Hum... The current argument ordering wouldn't be broken by adding the new
ordering. That would allow a period of transition without breaking any
existing code.

Comments?

--Beman


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