Microsoft KB Archive/113417

= INFO: C4097: Typedef-Name X Used as Synonym for Class-Name Z =

Article ID: 113417

Article Last Modified on 12/2/2003

-

APPLIES TO


 * Microsoft Visual C++ 1.0 Professional Edition
 * Microsoft Visual C++ 2.0 Professional Edition
 * Microsoft Visual C++ 2.1
 * Microsoft Visual C++ 2.2
 * Microsoft Visual C++ 4.0 Standard Edition
 * Microsoft Visual C++ 4.2 Professional Edition
 * Microsoft Visual C++ 5.0 Standard Edition

-



This article was previously published under Q113417



SUMMARY
When a typedef class name is used as a base class, the following warning will appear if compiled with /Ze (enable Microsoft extensions), which is on by default:

warning C4097:Non-standard extension: typedef-name 'identifier1' used as synonym for class-name 'identifier2'

If compiled with /Za (disable Microsoft extensions) using Visual C++ for Windows or Visual C++ 32-bit Edition 1.0, the following error appears:

error C2505: 'identifier' : is not a legal base class

This error message is correct in accordance with the C++ language specification. In C++ grammar, the "base-list" is specified as being a list of "base-specifiers". A base-specifier reduces to a "complete-class-name", which does not include "typedef-names". Consequently, the compiler is perfectly correct in generating this warning/error for the sample below.

This error is not generated using Visual C++ 32-bit Edition 2.X. Using Visual C++ 32-bit Edition, versions 2.x and above, the compiler generates the following warning with both the /Ze and /Za switches:

C4097: typedef-name 'identifier1' used as synonym for class-name 'identifier2'



MORE INFORMATION
For more information on C++ grammar, see the "Grammar Summary" in the "Annotated C++ Reference Manual" (ARM) by Bjarne Stroustrup and Margaret Ellis (Appendix A) or Appendix C of the C++ "Language Reference" that comes with Microsoft C/C++ 7.0 and Microsoft Visual C++ for Windows, versions 1.0 and 1.5. The same Grammar Summary is in Appendix A of the "C++ Language Reference" manual for Visual C++ 32-bit Edition, versions 1.1 and above, and in the online documentation under the "Grammar Summary" heading of the "C++ Langauge Reference" included with Visual C++ 32-bit Edition, version 4.0.

Sample Code
/* Compile options needed: /Ze /c /W4

class C { int _w; };

typedef C D;

class F : public D    // warning C4097 { };

class E : private virtual D // warning C4097 { };

class G : protected D // warning C4097 { };

Additional query words: 8.00 8.00c 9.00 9.10

Keywords: kbinfo kbcpponly kbcompiler KB113417

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.