|
Boost : |
From: Reece Dunn (msclrhd_at_[hidden])
Date: 2004-03-28 14:24:06
Gennaro Prota wrote:
>On Sun, 28 Mar 2004 12:55:10 +0200, "Pavel Vozenilek"
><pavel_vozenilek_at_[hidden]> wrote:
> >"Reece Dunn" <msclrhd_at_[hidden]> wrote
> >> So is it possible to prevent derivation? If not, then at least make it
> >> harder to do so (and put a warning in the docs)?
> >Yes.
> >Legal way:
> >http://www.research.att.com/~bs/bs_faq2.html#no-derivation
>And where is derivation prevented? ;) That only gives an error when
>you try instantiating the derived class. (Not only you may still
>derive, but of course you can access and use any static members).
There aren't any static members to errorcheck, so this is fine. If you try
to do something like:
class foobar: public boost::errorcheck<>
{
// ...
};
you will not get any errors until you do something like:
foobar foo;
which generates an error message like:
VC7.1 --
test.cpp(11) : error C2248:
'boost::detail::cannot_derive_errorcheck<Storage,MsgStorage>::__ctor' :
cannot access private member declared in class
'boost::detail::cannot_derive_errorcheck<Storage,MsgStorage>'
with
[
Storage=boost::policy::error_storage<>,
MsgStorage=boost::policy::no_errormsg_storage
]
and
[
Storage=boost::policy::error_storage<>,
MsgStorage=boost::policy::no_errormsg_storage
]
and
[
Storage=boost::policy::error_storage<>,
MsgStorage=boost::policy::no_errormsg_storage
]
d:\devel\ADL++\include\boost\errorcheck.hpp(102) : see declaration
of 'boost::detail::cannot_derive_errorcheck<Storage,MsgStorage>::__ctor'
with
[
Storage=boost::policy::error_storage<>,
MsgStorage=boost::policy::no_errormsg_storage
]
and
[
Storage=boost::policy::error_storage<>,
MsgStorage=boost::policy::no_errormsg_storage
]
VC6 --
test.cpp(70) : error C2248: 'cannot_derive_errorcheck<class
boost::policy::error_storage<int>,class
boost::policy::no_errormsg_storage>::cannot_derive_errorcheck<class
boost::policy::error_storage<int>,class boost::policy::no_errormsg_storage>'
: cannot access private member declared in class
'boost::detail::cannot_derive_errorcheck<class
boost::policy::error_storage<int>,class boost::policy::no_errormsg_storage>'
Borland C++5.5 --
Error E2247 test.cpp 11:
'boost::detail::cannot_derive_errorcheck<boost::policy::error_storage<int>,boost::policy::no_errormsg_storage>::cannot_derive_errorcheck()'
is not accessible in function foobar::foobar()
Therefore, the error message is intuitive: cannot_derive_errorcheck!
Regards,
Reece
_________________________________________________________________
Tired of 56k? Get a FREE BT Broadband connection
http://www.msn.co.uk/specials/btbroadband
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk