|
Boost : |
From: Alexander Nasonov (alnsn-boost_at_[hidden])
Date: 2005-05-26 17:09:34
Arkadiy Vertleyb writes:
> Hi Sasha :)
> Why "(other)"? I believe they are the same in the same TU...
Now I see. In 7.3.1.1:
An unnamed namespace definition behaves as if it were replaced by
namespace unique { /* empty body */ }
using namespace unique;
namespace unique { namespacebody
}
where all occurrences of *unique* in a translation unit are replaced by *the
same identifier* and this identifier
differs from all other identifiers in the entire program.
Somehow I missed *the same identifier*. How could I ever program for years
without knowing this?
> > namespaces. Is it intentional?
> Yes.
> Automatic ID generation leads to potential ODR violation, since, depending
> on the order of inclusion, the same template specializations can be
> generated with different IDs, and therefore with different bodies. This
was
> workarounded by placing them into anonimous namespaces, so that thay are
> different in different TU, and so not the subject to ODR.
[skiped]
> This question was discussed in the past, and it was decided that we can
live
> with this as long as we have a specific test that verifies that compilers
> don't really care. We have such test, and at some point Martin Wille
helped
> me by running it on como, which is considered to be the most strict
> compiler. Of course it's also a part of our regular test.
Yeah, I remember this discussion.
One idea came to my mind. In order to avoid ODR violations, can we switch
from definitions to declarations?
Every BOOST_TYPEOF_REGISTER_TYPE macro could add overloaded reg_entry
function which encodes a given type T:
template<class T>
char (& reg_entry(identity<T>) ) [CODE1][CODE2] ... [CODE50];
[skiped]
> I don't know how noticable this is in the current doc, though.
I don't care much about a quality of documenation for now. Lack of it may be
even better because it could protect from overusing the library. This
reminds me of the fact that a first version of MPL was introduced
inofficially.
Thanks Arkadiy and Peder for great library!
-- Alexander Nasonov
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk