|
Boost : |
Subject: Re: [boost] [TypeIndex] Peer review period for library acceptance begins, ending Thurs 21st Nov
From: Andrey Semashev (andrey.semashev_at_[hidden])
Date: 2013-11-16 14:46:21
On Saturday 16 November 2013 22:15:18 Antony Polukhin wrote:
> 2013/11/16 Andrey Semashev <andrey.semashev_at_[hidden]>
>
> > On Saturday 16 November 2013 19:46:25 Antony Polukhin wrote:
> > > 2013/11/16 Andrey Semashev <andrey.semashev_at_[hidden]>
>
> <...>
>
> I don't think there's any use for template_index, as I outlined in my
>
> > review.
> > type_index already has all the functionality and should work whether or
> > not
> > RTTI is enabled.
>
> template_index and type_index are two different types intentionally. It's
> the last attempt to notify user that he has done something wrong:
>
> // This is an interface of some library. Library is compiled without RTTI,
> // user uses this header with RTTI on.
> void some_function(boost::type_index& ti);
>
> If template_index and type_index are two different types and
> BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY is not defined, then user will
> get a linker error on GCC. If those two classes were exactly the same type,
> there'll be no link error. But user will get undefined behavior with hard
> detectable errors.
That does not require two different types, such as template_index and
type_index. You can define a single type_index in an inline namespace, which
name depends on the use of native RTTI. For C++03, a regular namespace and a
using declaration would suffice. That way all user's code will just always use
type_index, and there will be linking errors in case of configuration
inconsistencies.
Having two different interface classes instead divides the world in two parts
and creates integration problems for users. Imagine library A uses
template_index and library B uses type_index. How would these libraries
coexist in a user's application, which is happy to use native RTTI? And what
are the guidelines for library writers on choosing between these two types?
IMO, there should be a single type_index class, which should work in both
modes.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk