Discussion: Valid C++?
Afficher un message
Vieux 17/10/2007, 17h00   #6
Jonathan Lane
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Valid C++?

On Oct 17, 1:12 pm, Boris <bo...@gtemail.net> wrote:
> On Wed, 17 Oct 2007 14:43:50 +0300, Jonathan Lane
>
>
>
> <jonathan.la...@googlemail.com> wrote:
> > On Oct 17, 11:15 am, Boris <bo...@gtemail.net> wrote:
> >> Is this a valid C++ program (according to the C++ standard)? I ask as
> >> I'm
> >> trying to port a Windows library to Solaris, and the Solaris
> >> C++ compiler
> >> reports an error (The name x is ambiguous in ns1: ns2::x and ns1::x).
> >> The
> >> code below reproduces the problem, and I wonder now if I have to adapt
> >> the
> >> code or submit a bug report to Sun?

>
> >> namespace ns1 {
> >> struct x { };

>
> >> }

>
> >> namespace ns2 {
> >> using namespace ns1; // If this line is removed ...
> >> void x(); // ... or this line the code compiles.
> >> struct x { };

>
> >> }

>
> >> int main()
> >> {
> >> struct ns2::x x;

>
> >> }

>
> > Clearly the "using namespace ns1" line is going to be a problem since
> > you're polluting your ns2 namespace with the colliding names from ns1.
> > I can understand that this is going to make ns2 contain ambiguous
> > names.

>
> Normally I'd agree. However I you remove the function declaration the code
> compiles although the namespace is still polluted?


presumably then the ns2 version of the struct is hiding the ns1
version. How would you expect the compiler/your code to differentiate
between the two structs given that they're both in scope? There's
nothing to stop you having a function and struct/functor of the same
name. I'd suggest it's a bit misleading to maintenance programmers but
that's up to you of course. I guess the compiler's getting confused by
having three conflicting names. I'm sure there's a scoping rule that
affects this.

If you won't rename the structs then at least get rid of the using
directive in ns2. There's no need for it at all in this case and it's
just causing you problems.


  Réponse avec citation
 
Page generated in 0,08838 seconds with 9 queries