Article ID: 167356
Article Last Modified on 10/17/2003
APPLIES TO
- Microsoft Visual C++ 5.0 Enterprise Edition
- Microsoft Visual C++ 5.0 Professional Edition
This article was previously published under Q167356
SYMPTOMS
If a single name refers to both a class name and a function name, errors similar to the following may be incorrectly generated:
RESOLUTION
Replace the using declaration with a using directive. For example, in the following code replace the using declarations:
using B::f using B::g using B::x
with one:
using namespace B;
Please see the MORE INFORMATION section for a sample that demonstrates the workaround.
STATUS
Microsoft has confirmed that this is a problem in the Microsoft products that are listed at the beginning of this article. This problem was corrected in Microsoft Visual C++ version 6.0.
MORE INFORMATION
Section 7.3.3, paragraphs 4 thru 15 of the C++ Final Draft International Specification discuss this language behaviour in detail:
If the set of declarations and using-declarations for a single name are given in a declarative region, --they shall all refer to the same, or all refer to functions; or --exactly one declaration shall declare a class name or enumeration name and the other declarations shall all refer to the same entity or all refer to functions; in this case the class name or enumeration name is hidden.
Sample Code
namespace A { int x; } namespace B { int i; struct g { }; struct x { }; void f(int); void f(double); void g(char); } void func() { int i; void f(char); using B::f; f(3.5f); using B::g; g('a'); struct g g1; // error C2079 using B::x; using A::x; // error C2875 x = 99; // error C2513: struct x x1; } //Workaround namespace A { int x; } namespace B { int i; struct g { }; struct x { }; void f(int); void f(double); void g(char); } void func() { using namespace B ; int i; void f(char); f(3.5f); g('a'); struct g g1; using A::x; x = 99; struct x x1; }
Keywords: kbbug kbfix kbvc600fix KB167356