Discussion: Valid C++?
Afficher un message
Vieux 17/10/2007, 13h12   #4
Boris
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Valid C++?

On Wed, 17 Oct 2007 14:43:50 +0300, Jonathan Lane
<jonathan.lane1@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?

> Solutions:
> rename your functions and structs so that they're unique. This also
> makes the maintenance a lot easier since a developer doesn't need to
> think about whether you mean function x, struct x, or alternative
> struct x when they read your code.


Renaming the structs would be the last resort as from a design point of
view the names used in the library make sense and represent two different
concepts which happen to have the same name. The function is also
intentionally called like the struct: The struct is a function object, and
other parts of the code might want to reuse the function without
instantiating the function object first. I have no strict opinion here as
you can come up with other conventions of course. However I shouldn't need
to if this is valid C++ code?

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