문제

namespace A{
   int i;
}

int main(){
   using A::i;
   using A::i;
}

VS2010 - compiles fine

gcc (ideone) - compiles fine

Comeau - gives error ""ComeauTest.c", line 10: error: "i" has already been declared in the current scope using A::i;"

$7.3.3/8 - "A using-declaration is a declaration and can therefore be used repeatedly where (and only where) multiple declarations are allowed."

The example right there indicates that the code is indeed ill-formed.

So, is this a bug in GCC and VS2010?

EDIT 2:

Remove the multiple using directives as it was unrelated to the query on hand.

도움이 되었습니까?

해결책

The example you refer to is known to be inconsistent. The committee hasn't yet fixed this.

So, is this a bug in GCC and VS2010?

I don't think it's a bug in either of GCC/VS2010/Clang or Comeau. It appears to be a bug in the C++ Standard. In these cases, compile writers have to make up their mind on what is most viable. If you remove the example in question, then 3.3/4 states the example is valid: "Given a set of declarations in a single declarative region, each of which specifies the same unqualified name, ... they shall all refer to the same entity, or all refer to functions and function templates; or ...".

The question arises, as discussed in the linked issue, what 7.3.3/8 refers to when it says "declarations", which the committee didn't reach consensus about. And so, until then 3.3/4 applies for GCC/VS2010 and Clang, while Comeau chooses to use some other semantics.

다른 팁

Yes you are right. This is indeed a bug in g++, MSVC++ and Clang. Comeau has got it correct.

As you said 7.3.3/8 says

A using-declaration is a declaration and can therefore be used repeatedly where (and only where) multiple declarations are allowed

The following code snippet is also given.

void f()
{
    using A::i;
    using A::i;  //error: double declaration
}

Similarly your code is ill-formed too.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top