Article: Q167356
Product(s): Microsoft C Compiler
Version(s): winnt:5.0
Operating System(s):
Keyword(s): kbtool kbVC500bug kbVC600fixkbbuglist
Last Modified: 13-MAY-2001
-------------------------------------------------------------------------------
The information in this article applies to:
- Microsoft Visual C++, 32-bit Enterprise Edition, version 5.0
- Microsoft Visual C++, 32-bit Professional Edition, version 5.0
-------------------------------------------------------------------------------
SYMPTOMS
========
If a single name refers to both a class name and a function name, errors similar
to the following may be incorrectly generated:
error C2079: 'g1' uses undefined struct 'g' error C2875: using-declaration
causes a multiple declaration of 'A::x' error C2513: 'struct B::x' :
decl-specifier is missing a declarator before '='
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 this to be 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;
}
Additional query words:
======================================================================
Keywords : kbtool kbVC500bug kbVC600fix kbbuglist
Technology : kbVCsearch kbAudDeveloper kbVC500 kbVC32bitSearch kbVC500Search
Version : winnt:5.0
Issue type : kbbug
Solution Type : kbfix
=============================================================================