Boost logo

Boost :

From: williamkempf_at_[hidden]
Date: 2001-10-08 09:27:01

--- In boost_at_y..., Howard Hinnant <hinnant_at_t...> wrote:
> On Saturday, October 6, 2001, at 08:17 AM, Kevlin Henney wrote:
> >> Maybe you ought to write up a defect report. It will be easier
> >> the LWG
> >> to understand the issue if you boil it down to a very simple
piece of
> >> code
> >> that you want to know is or isn't conforming.
> >>
> >> Let's see. Something like this:
> >>
> >> #include <stdexcept>
> >>
> >> class lock_error : public std::runtime_error
> >> {
> >> public:
> >> lock_error() : std::runtime_error("thread lock error") { }
> >> };
> >>
> >> Is this conforming code? Note the lack of #include <string>,
> >> that std::runtime_error() takes a const string& argument, and
> >> there is no constructor taking a const char*.
> >>
> >> Post it on comp.std.c++ with a subject that begins "Defect
> >
> > I believe that this issue (between <stdexcept> and <string>) is a
> > problem, although I don't know if it's yet a DR. It has at least
> > mentioned in passing by myself, Howard Hinnant and a couple of
others at
> > one or other of the ISO meetings in the last year (and the cyclic
> > dependency problem was also the basis for a general solution I
wrote up
> > in
> Martin Sebor has repeatedly tried to get a dr issue going in this
> general area (not specifically with <string> and <stdexcept>) and
> failed. This issue came up in the hs_conformance reflector prior
to the
> CUJ Vendor Review article. In that case it did deal specifically
> <string> and <stdexcept>.
> I believe the standard should say more about this issue, but I to
> have the standard-eze in hand. Several people have proposed rules,
> I believe that at least an informal consensus may be forming. My
> personal opinion, which has been influenced by similar words
> spoken by noted experts, is that the standard should say something
> > If you explicitly use a standard defined name, then you must
> > include the associated header. Otherwise you do not have to
> > the header, even if you are implicitly referring to said object.
> Of course the above "rule" would have to be encoded in standard-eze
> that only high priests are capable of interpreting its true
meaning. ;-)
> Under this rule, Beman's example would be conforming because it
> implicitly refers to std::string, not explicitly. Thus #include
> <string> is not necessary. If the example were changed to:
> lock_error() : std::runtime_error(std::string("thread lock
> error")) { }
> then #include <string> becomes necessary.
> Just my .02.

I'm glad others feel the same as I. Do I need to try and propose yet
another defect on this subject or is there any progress occuring
within the comittee on at least discussing this issue?

Bill Kempf

Boost list run by bdawes at, gregod at, cpdaniel at, john at