INFO: C4097: Typedef-Name X Used as Synonym for Class-Name ZLast reviewed: October 3, 1997Article ID: Q113417 |
The information in this article applies to:
SUMMARYWhen 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 classThis 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 INFORMATIONFor 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
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |