//====================================================================== // bigid2.cpp // Test program to demonstrate ISO standard recommendations for // minimum identifier lengths. // // References // ISO/IEC 14882:1998(E), Annex B. // // 1.00, 1998-10-15, David R Tribble. // First cut. // 1.01, 1998-10-27, David R Tribble. // Made generated names all unique. // 1.02, 1998-11-12, David R Tribble. // Fixed syntax error in NREF (as suggested by Steve Clamage). // // Written by David R. Tribble, 1998. // This source code is in the public domain. //---------------------------------------------------------------------- // Preprocessor macro magic #define K(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q) \ a##b##c##d##e##f##g##h##i##j##k##l##m##n##o##p##q // A 1021+N-character name #define B1024(c) \ K(B234567890123456789012345678901234567890123456789012345678901234,\ B234567890123456789012345678901234567890123456789012345678901234,\ B234567890123456789012345678901234567890123456789012345678901234,\ B234567890123456789012345678901234567890123456789012345678901234,\ B234567890123456789012345678901234567890123456789012345678901234,\ B234567890123456789012345678901234567890123456789012345678901234,\ B234567890123456789012345678901234567890123456789012345678901234,\ B234567890123456789012345678901234567890123456789012345678901234,\ B234567890123456789012345678901234567890123456789012345678901234,\ B234567890123456789012345678901234567890123456789012345678901234,\ B234567890123456789012345678901234567890123456789012345678901234,\ B234567890123456789012345678901234567890123456789012345678901234,\ B234567890123456789012345678901234567890123456789012345678901234,\ B234567890123456789012345678901234567890123456789012345678901234,\ B234567890123456789012345678901234567890123456789012345678901234,\ B23456789012345678901234567890123456789012345678901234567890_,c) // 256-level class decl head #define CLASS_HEAD(c) class B1024(c) { public: #define CLASS_HEAD4(c) \ CLASS_HEAD(c##1)\ CLASS_HEAD(c##2)\ CLASS_HEAD(c##3)\ CLASS_HEAD(c##4) #define CLASS_HEAD16(c) \ CLASS_HEAD4(c##A)\ CLASS_HEAD4(c##B)\ CLASS_HEAD4(c##C)\ CLASS_HEAD4(c##D) #define CLASS_HEAD256 \ CLASS_HEAD16(W)\ CLASS_HEAD16(X)\ CLASS_HEAD16(Y)\ CLASS_HEAD16(Z) // 256-level class decl tail #define CLASS_TAIL }; #define CLASS_TAIL4 \ CLASS_TAIL\ CLASS_TAIL\ CLASS_TAIL\ CLASS_TAIL #define CLASS_TAIL16 \ CLASS_TAIL4\ CLASS_TAIL4\ CLASS_TAIL4\ CLASS_TAIL4 #define CLASS_TAIL256 \ CLASS_TAIL16\ CLASS_TAIL16\ CLASS_TAIL16\ CLASS_TAIL16 // A 256-level qualified name #define NREF(c) B1024(c) #define NREF4(c) \ NREF(c##1)::\ NREF(c##2)::\ NREF(c##3)::\ NREF(c##4) #define NREF16(c) \ NREF4(c##A)::\ NREF4(c##B)::\ NREF4(c##C)::\ NREF4(c##D) #define NREF256 \ NREF16(W)::\ NREF16(X)::\ NREF16(Y)::\ NREF16(Z) //---------------------------------------------------------------------- // Class B2345678901234567890123456789012... // This class has a name that is 1024 characters long, and has 256 // nested classes, each of which has a different 1024-character // name. //---------------------------------------------------------------------- CLASS_HEAD256 static int s_mem; int m_mem; CLASS_TAIL256 //---------------------------------------------------------------------- // big_named_objectB // This is an instance of the class declared above. // // If this object (which has external linkage) is successfully // instantiated, then the compiler appears to properly support very // long identifiers. //---------------------------------------------------------------------- /*static*/ int NREF256::s_mem = 234; static class NREF256 big_named_objectB; //---------------------------------------------------------------------- // ::main() // Dummy entry function. //---------------------------------------------------------------------- int main() { return (0); } // End bigid2.cpp