msg.txt
上传用户:filter2008
上传日期:2010-03-12
资源大小:2959k
文件大小:315k
源码类别:

编辑器/阅读器

开发平台:

C/C++

  1.       of a structure (or union) is equal to the maximum
  2.       alignment of any of its members.  When an array of
  3.       structures is allocated, the compiler ensures that each
  4.       structure is allocated at an address with the proper
  5.       alignment.  This will require padding if the size of the
  6.       structure is not an even multiple of its maximum
  7.       alignment.  For example:
  8.   struct A { int n; char ch; } a[10];
  9.       Assuming the size and alignment of int is 4 then the size
  10.       of each struct is 5 but its alignment is 4.  As a result
  11.       each struct in the array will be padded with 3 bytes.
  12.       Alignment can vary with the compiler and the machine.  If
  13.       binary data is to be shared by separately compiled
  14.       modules, it is safer to make sure that all shared
  15.       structures and unions are explicitly padded.
  16. 960   Violates MISRA Required Rule Name, String  -- MISRA is the
  17.       "Guidelines for the use of the C Language in Vehicle Based
  18.       Software".   You may disable individual rules to your
  19.       taste by using the Rule number in an esym option.  For
  20.       example:
  21.   -esym( 960, 75, 8? )
  22.       will suppress MISRA rules 75 and any of those between 80
  23.       and 89 inclusive that are issued as the result of a
  24.       message 960.  See  [10] for information on the MISRA
  25.       guidelines.
  26. 961   Violates MISRA Advisory Rule Name, String  -- This message
  27.       is issued when a violation of the MISRA advisory
  28.       guidelines is detected.  See also Message  960.
  29. 964   Header file FileName not directly used in module String
  30.       -- The given header file was not used in the given module,
  31.       however it, itself, included a header file (possibly
  32.       indirectly) that was used.  An example of this is os2.h
  33.       that is an umbrella header serving only to include other
  34.       headers.  Compare this message with  766.  See also the
  35.       discussion in Section 11.8.1 Unused Headers.
  36. 966   Indirectly included header file 'FileName' not used in
  37.       module 'String'  -- The header file given by FileName was
  38.       unused directly or indirectly in a given module outside of
  39.       its group.  It was not, however, directly included by the
  40.       module and so may not easily be excluded without
  41.       disturbing the header including it.  Since this header may
  42.       be included in other places caution is advised.  This
  43.       message is a weaker version of  766.  See the discussion
  44.       in Section 11.8.1 Unused Headers.  See also message  964.
  45. 970   Use of modifier or type 'Name' outside of a typedef  --
  46.       Some standards require the use of type names (defined in
  47.       typedef's) in preference to raw names used within the text
  48.       of the program.  For example they may want you to use
  49.       INT32 rather than int where INT32 is defined as:
  50.   typedef int INT32;
  51.       This message is normally issued for the standard intrinsic
  52.       types: bool, char, wchar_t, int, float, double, and for
  53.       modifiers unsigned, signed, short and long.  You may
  54.       enable this message and then suppress the message for
  55.       individual types to obtain special effects.  For example
  56.       the following will enable the message for all but bool.
  57.   +e970  -esym(970,bool)
  58. 971   Use of 'char' without 'signed' or 'unsigned'  -- The
  59.       'char' type was specified without an explicit modifier to
  60.       indicate whether the char was signed or unsigned.  The
  61.       plain char type can be regarded by the compiler as
  62.       identifying a signed or an unsigned quantity, whichever is
  63.       more efficient to implement.  Because of this ambiguity,
  64.       some standards do not like the use of char without an
  65.       explicit modifier to indicate its signedness.
  66. 973   Unary operator in macro 'Symbol' not parenthesized  -- A
  67.       unary operator appearing in an expression-like macro was
  68.       found to be not parenthesized.  For example:
  69.   #define N -1
  70.       The user may prefer to parenthesize such things as:
  71.   #define N (-1)
  72.       This has been placed in the elective note category because
  73.       we cannot find an instance when this really produces a
  74.       problem.  The important case of unparenthesized binary
  75.       operators is covered with message  773.
  76. 17.7  C++ Syntax Errors
  77. 1001  Scope 'Name' must be a struct or class name  -- In an
  78.       expression of the form X::Y,  X must be a class name.
  79.       [11 section 10.4]
  80. 1002  'this' must be used in class member function  -- The
  81.       keyword this refers to the class being passed implicitly
  82.       to a member function.  It is invalid outside a class
  83.       member function.   [11 section 5.1]
  84. 1003  'this' may not be used in a static member function  -- A
  85.       static member function receives no this pointer.   [11
  86.       section 9.4]
  87. 1004  Expected a pointer to member after .* or ->*  -- The .*
  88.       and ->* operators require pointer to members on the right
  89.       hand side.   [11 section 5.5]
  90. 1005  Destructor declaration requires class  -- While expecting
  91.       a declaration a '~' character was encountered.  This was
  92.       presumed to be the start of a destructor.  However no
  93.       class was specified.   [11 section 12.4]
  94. 1006  Language feature 'String' not supported  -- The indicated
  95.       feature, while not supported in the current version, will
  96.       hopefully be supported in future versions of the product.
  97. 1007  Pure specifier for function 'Symbol' requires a virtual
  98.       function  -- An '=' was found after a declaration.  Was
  99.       this the start of a pure specifier?  The declaration was
  100.       not that of a member function, which it must be.  Also,
  101.       the member function should be virtual.   [11 section 10.3]
  102. 1008  Expected '0' to follow '=', text ignored  -- Some
  103.       nonstandard extensions to C++ allow integers to follow '='
  104.       for declarations of member functions.  If you are using
  105.       such extensions simply suppress this message.  If only
  106.       library headers are using this extension use -elib(1008).
  107.       [11 section 10.3]
  108. 1009  operator String not redefinable  -- The cited operator,
  109.       one of '.*',  '?', '::' or  '.', may not be overloaded.
  110.       [11 section 13.4]
  111. 1010  Expected a type or an operator  -- Following the keyword
  112.       operator the parser expected either an operator (including
  113.       new, delete, (), [], comma) or a type.   [11 sections 13.4
  114.       and 12.3.2]
  115. 1011  Conversion Type Name too long  -- An upper limit of 50
  116.       characters has been reached on a conversion type name.
  117. 1012  Type not needed before 'operator type'  -- The return type
  118.       of a function introduced with 'operator Type' is Type and
  119.       may not be preceded with the same or any other Type.  [11
  120.       section 12.3.2]
  121. 1013  Symbol 'Name' not a member of class 'Name'  -- The second
  122.       operand of a scope operator or a '.' or '->' operator is
  123.       not a member of the class (struct or union) expressed or
  124.       implied by the left hand operand.   [11 section 3.2]
  125. 1014  Explicit storage class not needed for member function
  126.       'Symbol'  -- An explicit Symbol storage class such as
  127.       extern or static was given in a separate definition of a
  128.       class member.  The storage class is effectively defined by
  129.       its appearance within the class and may not be restated at
  130.       definition time.
  131. 1015  Symbol 'Name' not found in class  -- In an expression of
  132.       the form X::Y, Y must be a member of X or of a public or
  133.       protected base class of X.   [11 section 10.4]
  134. 1016  Symbol 'Symbol' is supposed to denote a class  -- In a
  135.       base-specifier an identifier is supposed to specify a base
  136.       class.  However, the identifier was not previously
  137.       declared in this module.   [11 section 10]
  138. 1017  conflicting access-specifier 'String'  -- Two different
  139.       access specifiers were given in a simple base-specifier.
  140.       [11 section 10]
  141. 1018  Expected a type after 'new'  -- In an expression involving
  142.       new, a type is expected after possibly processing a
  143.       placement.  None was found.   [11 section 5.3.3]
  144. 1019  Could not find match for function 'Symbol(String)'  -- In
  145.       attempting to find a match between a set of overloaded
  146.       functions or operators (name given as Symbol) and an
  147.       actual argument list (provided as String) no match could
  148.       be found.   [11 section 13.2]
  149. 1022  Function: 'String' must be a class member  -- There are
  150.       four operators not to be defined except as class members.
  151.       These are:
  152.   =  ()  []  ->
  153.       The parameter String indicates which it is.   [11 sections
  154.       13.4.3 and 13.4.6]
  155. 1023  Call 'String(String)' is ambiguous; candidates: 'String'
  156.       -- A call to an overloaded function or operator is
  157.       ambiguous.  The candidates of choice are provided in the
  158.       message.   [11 section 13.2]
  159. 1024  No function has same argument count as 'Name'  -- A call
  160.       to an overloaded function could not be resolved
  161.       successfully because no function is declared with the same
  162.       number of arguments as in the call.   [11 section 13.2]
  163. 1025  No function matches invocation 'Name' on arg no. Integer
  164.       -- A call to an overloaded function could not be resolved
  165.       because each declared function has a type incompatibility
  166.       with the indicated argument.   [11 section 13.2]
  167. 1026  Undominated function 'String' does not dominate 'String'
  168.       on call to 'String'  -- A call to an overloaded function
  169.       could not be resolved because no one function dominates
  170.       all others.  This is a subtle issue in the overload
  171.       resolution process.  The selected function must be
  172.       strictly better than any non-selected function in at least
  173.       one argument.   [11 section 13.2]
  174. 1027  Non-consecutive default arguments in function 'String',
  175.       assumed 0  -- Default arguments need to be consecutive.
  176.       For example
  177.   void f(int i=0, int j, int k=0);
  178.       is illegal.   [11 section 8.2.6]
  179. 1028  Last argument not default in first instance of function
  180.       'String', assumed 0  -- If any argument of a function is
  181.       given a default value then all subsequent arguments need
  182.       to be given a default value.   [11 section 8.2.6]
  183. 1029  Default argument repeated in function 'String'  -- A
  184.       default value for a given argument for a given function
  185.       should only be given once.   [11 section 8.2.6]
  186. 1030  Not all arguments after arg no. Integer are default in
  187.       function 'String'  -- An argument that has a default value
  188.       must either be followed by another argument that has a
  189.       default value, or must be the last argument.   [11 section 8.2.6]
  190. 1031  Local variable 'Symbol' used in default argument
  191.       expression  -- Default values for arguments may not use
  192.       local variables.   [11 section 8.2.6]
  193. 1032  Member 'String' cannot be called without object  -- There
  194.       was an attempt to call a non-static member function
  195.       without specifying or implying an object that could serve
  196.       as the basis for the this pointer.  If the member name is
  197.       known at compile time it will be printed with the message.
  198.       [11 section 5.24]
  199. 1033  Static member functions cannot be virtual  -- You may not
  200.       declare a static member function virtual.   [11 section 10.2]
  201. 1034  Static member 'Symbol' is global and cannot be redefined
  202.       -- This can come as a surprise to the novice C++
  203.       programmer.  The word 'static' within a class definition
  204.       is used to describe a member that is alone and apart from
  205.       any one object of a class.  But such a member has program
  206.       scope not file scope.  The word 'static' outside a class
  207.       definition implies file scope not program scope.  [11
  208.       section 9.4]
  209. 1035  Non-static member 'Symbol' cannot initialize a default
  210.       argument  -- A default argument cannot be initialized from
  211.       a class member unless an instantiation of the class is
  212.       provided.   [11 section 8.2.6]
  213. 1036  ambiguous reference to constructor; candidates: 'String'
  214.       -- There is more than one constructor that can be used to
  215.       make a desired conversion.   [11 section 12.3.2]
  216. 1037  ambiguous reference to conversion function; candidates:
  217.       'String'  -- There is more than one conversion function
  218.       (of the form operator type () ) that will perform a
  219.       desired conversion.   [11 section 12.3.2]
  220. 1038  type 'Name' not found, nested type 'Name::String' assumed
  221.       -- We have found what appears to be a reference to a type
  222.       but no such type is in scope.  We have, however, been able
  223.       to locate a type buried within another class.  Is this
  224.       what the user intended?  If this is what is intended, use
  225.       full scoping.  If your compiler doesn't support the
  226.       scoping, suppress with -esym.   [11 section 3.2]
  227. 1039  Symbol 'Symbol' is not a member of class 'String'  -- In a
  228.       declaration for the symbol X::Y, Y was not previously
  229.       established as a member of X.   [11 section 10.4]
  230. 1040  Symbol 'Symbol' is not a legal declaration within class
  231.       'String'  -- A declaration of the symbol X::Y appears
  232.       within a class definition (other than for class X).  It is
  233.       not a friend declaration.  Therefore it is in error.
  234. 1041  Can't declare 'String', assumed 'operator String'  -- This
  235.       message can be given with String equal to new or delete.
  236.       Each 'String' in this message has the same value.  A
  237.       common mistake with beginning C++ programmers is to
  238.       declare (and/or define) new when they mean to define opera
  239.       tor new.  We presume this was what was intended.
  240.       [11 section 12.5]
  241. 1042  At least one class-like operand is required with Name  --
  242.       In defining (or declaring) an operator you must have at
  243.       least one class as an operand.   [11 section 13.4]
  244. 1043  Attempting to 'delete' a non-pointer  -- An expression
  245.       being delete'd is a non-pointer, non-array.  You may only
  246.       delete that created with an invocation of new.
  247.       [11 section 5.3.4]
  248. 1046  member 'Symbol', referenced in a static function, requires
  249.       an object  -- The Symbol is a non-static member of a class
  250.       and hence requires a class instantiation.  None is in
  251.       sight.   [10 section 9.4]
  252. 1047  a template declaration must be made at file scope  -- A
  253.       template declaration may not appear within a function or
  254.       within a class.   [10 section 14.1]
  255. 1048  expected a constant expression  -- Within a template
  256.       argument list a constant expression was expected.  An
  257.       expression of the form T<arg1,arg2,...> was encountered
  258.       and arg i for some i corresponds to a non-class parameter
  259.       in the original template declaration.  Such arguments need
  260.       to be constants.   [10 section 14.5]
  261. 1049  Too many template arguments  -- There are more arguments
  262.       in the template class-name than there were parameters in
  263.       the original template declaration.   [10 section 14.5]
  264. 1050  expected a template argument list '<...>' for template
  265.       'Symbol'  -- The name of a class template identified by
  266.       Symbol was used without specifying a template argument
  267.       list.   [10 section 14.5]
  268. 1051  Symbol 'Name' is both a function and a variable  --
  269.       Whereas it is possible to overload a function name by
  270.       giving it two different parameter lists, it is not
  271.       possible to overload a name in any other way.  In
  272.       particular a function name may not also be used as a
  273.       variable name.   [11 section 9.2]
  274. 1052  a type was expected, 'class' assumed  -- A template
  275.       parameter list consists of 2 kinds of parameters:  class
  276.       identifier and type.  The parameter did not begin with
  277.       class and was not a type.   [10 section 14.5]
  278. 1053  'String' cannot be distinguished from 'String'  -- An
  279.       overloaded function name had two parameter lists that were
  280.       so close that discrimination between them would be
  281.       difficult and error prone.  Eg. void f(const int); and
  282.       void f(int);   [11 section 13] 
  283. 1054  template variable declaration expects a type, int assumed
  284.       -- An expression of the form T<arg,arg,...> was
  285.       encountered.  One of the arguments corresponding to a type
  286.       parameter in the original template declaration is not a
  287.       type.   [10 section 14.5]
  288. 1055  Symbol 'Symbol' undeclared, assumed to return int  --
  289.       Whereas in C you may call a function without a prior
  290.       declaration, in C++ you must supply such a declaration.
  291.       For C programs you would have received an Informational
  292.       message ( 718) in this event.   [11 section 5.2.2]
  293. 1056  assignment from void * is not allowed in C++  -- Whereas
  294.       in C you may assign from void* to any other (data) pointer
  295.       without a diagnostic, in C++ you may not do this.  It will
  296.       require a cast.   [11 section 4.6]
  297. 1057  member 'Symbol' cannot be used  without an object  -- The
  298.       indicated member referenced via scope operator cannot be
  299.       used in the absence of this pointer.   [11 section 5.2.4]
  300. 1058  Initializing a non-const reference 'Symbol' with a
  301.       non-lvalue  -- A reference is normally initialized with an
  302.       lvalue.  If you attempt to initialize a reference with a
  303.       non-lvalue, a temporary is created to serve as a surrogate
  304.       lvalue.  However, modifications made to the temporary will
  305.       be lost.  This was legal at one time and is now illegal.
  306.       Make the reference a const if you can.  You may be
  307.       initializing a reference without realizing it.  A member
  308.       function has an implicit parameter, which is taken to be a
  309.       reference to its object.  If this is the situation make
  310.       the member const.  That is, use void f(...) const; rather
  311.       than void f(...);
  312. 1059  Can't convert from Type to Type  -- An attempt was made to
  313.       initialize a reference with an object having a type other
  314.       than the target type but no function could be found to
  315.       effect the required conversion.   [11 section 12.3]
  316. 1060  String member 'Symbol is not accessible to non-member
  317.       non-friend functions  -- There is an attempt to access a
  318.       private or protected member of a class and the access is
  319.       considered a violation of the access rules (although
  320.       everything else proceeds as though no violation occurred).
  321.       Specifically, the function attempting to make access must
  322.       be a friend or member of the nominal class through which
  323.       the access is made.  See also  1061.   [11 section 11]
  324. 1061  String member 'Symbol' is not accessible through
  325.       non-public inheritance  -- There is an attempt to access a
  326.       private, protected or public member (the text of the
  327.       message indicates which kind as well as which member) of a
  328.       class through a class derived from the original.  There is
  329.       an access violation (see  1060 for the more common access
  330.       violation) critically dependent on the fact that the
  331.       inheritance relationship is non-public.   [11 section
  332.       11.2]
  333. 1062  template must be either a class or a function  --
  334.       Following template < arglist > the parser expects to find
  335.       either the token class or a function declaration or
  336.       definition.   [10 section 14.5]
  337. 1063  Argument to copy constructor for class 'Symbol' should be
  338.       a reference  -- A constructor for a class closely
  339.       resembles a copy constructor.  A copy constructor for
  340.       class X is typically declared as:
  341.   X( const X &)
  342.       If you leave off the '&' then a copy constructor would be
  343.       needed just to copy the argument into the copy
  344.       constructor.  This is a runaway recursion.   [11 section 12.1]
  345. 1064  Template parameter list for template 'Symbol' inconsistent
  346.       with Location  -- The template parameter list for a
  347.       template function declaration or definition is
  348.       inconsistent with that of a prior declaration or
  349.       definition.   [10 section 14.5]
  350. 1065  Symbol 'Symbol' not declared as "C" conflicts with
  351.       Location  -- A symbol previously declared as extern "C" in
  352.       some other module is not declared as extern "C" in this
  353.       module.  This could be the source of very mysterious
  354.       linker diagnostics since a name declared as extern "C" is
  355.       not subject to the name mangling procedures that strictly
  356.       C++ functions are.   [11 section 7.4]
  357. 1066  Symbol 'Symbol' declared as "C" conflicts with Location
  358.       -- A symbol is being declared as extern "C" and was not so
  359.       declared in some other module.  This could be the source
  360.       of very mysterious linker diagnostics since a name
  361.       declared as extern "C" is not subject to the name mangling
  362.       procedures that strictly C++ functions are.   [11 section
  363.       7.4]
  364. 1067  invalid prototype for function 'Symbol'  -- Whenever
  365.       operator delete or operator delete [] is defined its first
  366.       parameter must be declared as void *.  For member
  367.       functions an optional second parameter may be size_t.
  368.       [10 section 12.5].
  369. 1068  Symbol 'Symbol' can not be overloaded  -- operator delete
  370.       or operator delete [] can be redefined but not overloaded.
  371.       There can only be one operator delete and one operator
  372.       delete [] but neither of these can be overloaded.   [10
  373.       section 12.5].
  374. 1069  Symbol 'Name' is not a base class of class 'Name'  --
  375.       Within a constructor initialization list a name was found
  376.       that did not correspond to either a direct base class of
  377.       the class being defined or a member of the class.
  378. 1070  No scope in which to find symbol 'Name'  -- This could
  379.       arise in an expression of the form X::Y where X does not
  380.       represent a valid scope.
  381. 1071  Constructors and destructors can not have return type  --
  382.       Constructors and destructors may not be declared with a
  383.       return type, not even void.  See ARM Section 12.1 and 12.4.
  384. 1072  Reference variable 'Symbol' must be initialized  -- A
  385.       reference variable must have an initializer at the point
  386.       of declaration.
  387. 1073  Insufficient number of template parameters; 'String'
  388.       assumed  -- A (class) template instantiation did not have
  389.       a sufficient number of parameters.  String indicates what
  390.       the missing argument is presumed to be.
  391. 1074  Expected a namespace identifier  -- In a declaration of
  392.       the form:
  393.   namespace name = scoped-identifier
  394.       the scoped-identifier must identify a namespace.
  395. 1075  Ambiguous reference to symbol 'Symbol' and symbol 'Symbol'
  396.       -- Two namespaces contain the same name.  A reference to
  397.       such a name could not be disambiguated.  You must fully
  398.       qualify this name in order to indicate the name intended.
  399. 1077  Could not evaluate default template parameter 'String'  --
  400.       The evaluation of template parameters is deferred until
  401.       needed.  Thus:
  402.   template< class T = abc > class A { /* ... */ };
  403.       will be greeted with an Error 1077 only if an
  404.       instantiation of A requires evaluation of the default
  405.       argument and if that evaluation cannot be made.  In that
  406.       event int is assumed for type parameters and 0 is assumed
  407.       for object parameters.
  408. 1078  class 'Symbol' should not have itself as a base class  --
  409.       The following situation will trigger this message.
  410.   class A : public A { };
  411.       You can't define A in terms of itself as there is no
  412.       escape from the recursive plummet.
  413. 1079  Could not find '>' or ',' to terminate template parameter
  414.       at Location  -- The default value for a template parameter
  415.       appears to be malformed.  For example, suppose the user
  416.       mistakenly substituted a ']' for a '>' producing the
  417.       following:
  418.   template <class T = A< int ] >
  419.      class X
  420.         {
  421.         };
  422.       This will cause PC-lint/FlexeLint to process to the end of
  423.       the file looking (in vain) for the terminating pointy
  424.       bracket.  Not finding it will cause this message to be
  425.       printed.  Fortunately, the message will bear the Location
  426.       of the malformed template.
  427. 1080  Definition for class 'Name' is not in scope -- This
  428.       message would be issued whenever a class definition were
  429.       required and it were not available.  For example:
  430.     Class X;            // declare class X
  431.             X *p;               // OK, no definition required
  432.             X a;           // Error 1080
  433. 17.8  C++ Warning Messages
  434. 1401  member symbol 'Symbol' (Location) not initialized by
  435.       constructor  -- The indicated member symbol was not
  436.       initialized by a constructor.  Was this an oversight?
  437. 1402  member 'Symbol' (Location) not initialized  -- The
  438.       indicated member symbol was not initialized before use.
  439.       Either this is in a constructor where it is presumed that
  440.       no members are pre-initialized or this is after a
  441.       statement removing its initialization such as a delete or
  442.       a free.
  443. 1403  member 'Symbol' (Location) not initialized  -- The
  444.       indicated member symbol was not initialized before a point
  445.       where its address is being passed to a constant pointer.
  446.       This looks suspicious.  Either this is in a constructor
  447.       where it is presumed that no members are pre-initialized
  448.       or this is after a statement removing its initialization
  449.       such as a delete or a free.
  450. 1404  deleting an object of type 'Symbol' before type is defined
  451.       -- The following situation was detected:
  452.             class X;   ...   X *p;  ...  delete p;
  453.       That is, a placeholder declaration for a class is given
  454.       and an object of that type is deleted before any
  455.       definition is seen.  This may or may not be followed by
  456.       the actual class definition:
  457.     class X { ... };
  458.       A delete before the class is defined is dangerous because,
  459.       among other things, any operator delete that may be
  460.       defined within the class could be ignored.
  461. 1411  Member with different signature hides virtual member
  462.       'Symbol' (Location)  -- A member function has the same
  463.       name as a virtual member of a derived class but it has a
  464.       different signature (different parameter list).  This is
  465.       legal but suspicious, because it looks as though the
  466.       function would override the virtual function but doesn't.
  467.       You should either adjust the parameters of the member so
  468.       that the signatures conform or choose a different name.
  469.       See also message 1511.
  470. 1412  Reference member 'Symbol' is not initialized  -- A class
  471.       member typed reference to class (or struct or union) is
  472.       mentioned in a constructor initializer list.  But the
  473.       class (or struct or union) referenced has no constructor
  474.       and so is never initialized.
  475. 1413  function 'Symbol' is returning a temporary via a reference
  476.       -- It appears that a function (identified as Symbol in the
  477.       message) declared to return a reference is returning a
  478.       temporary.  According to the C++ standard (Section 12.2),
  479.       in addressing the issue of binding temporary values to
  480.       references, says "A temporary bound to the returned value
  481.       in a function return statement ... persists until the
  482.       function exits".  Thus the information being returned is
  483.       not guaranteed to last longer than the function being called.
  484.       It would probably be better to return by value rather than
  485.       reference.  Alternatively, you may return a static
  486.       variable by reference.  This will have validity at least
  487.       until the next call upon the same function.
  488. 1501  data member 'Symbol' has zero size  -- A data member had
  489.       zero size.  It could be an array of zero length or a class
  490.       with no data members.  This is considered an error in C
  491.       (Error  43) but in C++ we give this warning.  Check your
  492.       code to make sure this is not an error.  Some libraries
  493.       employ clever templating, which will elicit this message.
  494.       In such a case it is necessary for you to inhibit the
  495.       message outright (using -e1501) or through a judicious use
  496.       of -esym(1501,...).
  497. 1502  defined object 'Symbol' has no data members  -- A variable
  498.       (Symbol) is being instantiated that belongs to a class
  499.       that contains no data members (either directly or
  500.       indirectly through inheritance).   [11 section 9]
  501. 1503  a tagged union is not anonymous  -- A tagged union without
  502.       a declarator appeared within a struct/union declaration.
  503.       An anonymous union requires no tag.   [11 section 9.5]
  504. 1504  useless struct declaration  -- An untagged struct
  505.       declaration appeared within a struct/union and has no
  506.       declarator.  It is not treated like an anonymous union.
  507.       Was this intended?
  508. 1505  no access specifier provided, 'String' assumed  -- A base
  509.       class specifier provides no access specifier (public,
  510.       private or protected).  An explicit access specifier is
  511.       always recommended since the default behavior is often not
  512.       what is expected.  For example:
  513.        class A : B { int a; };
  514.       would make B a private base class by default.
  515.   class A : private B { int a; };
  516.       is preferred if that's what you want.   [11 section 11.1]
  517. 1506  Call to virtual function 'Symbol' within a constructor or
  518.       destructor  -- A call to a virtual function was found in a
  519.       constructor or a destructor of a class.  If this class is
  520.       a base class of some other class (why else make a virtual
  521.       call?), then the function called is not the overriding
  522.       function of the derived class but rather the function
  523.       associated with the base class.  If you use an explicit
  524.       scope operator this message will not be produced.   [20
  525.       section 9]
  526. 1507  attempting to 'delete' an array  -- The type of an object
  527.       to be delete'd is usually a pointer.  This is because
  528.       operator new always returns a pointer and delete may only
  529.       delete that allocated via new.  Perhaps this is a
  530.       programmer error attempting to delete an auto array? [19]
  531. 1509  base class destructor for class 'Name' is not virtual  --
  532.       The indicated class is a base class for some derived
  533.       class.  It has a non-virtual destructor.  Was this a
  534.       mistake?  It is conventional to virtualize destructors of
  535.       base classes so that it is safe to delete a base class
  536.       pointer.   [19]
  537. 1510  base class 'Name' has no destructor  -- The indicated
  538.       class is a base class for some derived class that has a
  539.       destructor.  The base class does not have a destructor.
  540.       Is this a mistake?  The difficulty that you may encounter
  541.       is this; if you represent (and manipulate) a heterogeneous
  542.       collection of possibly derived objects via a pointer to
  543.       the base class then you will need a virtual base class
  544.       destructor to invoke the derived class destructor.
  545.       [13 section 4]
  546. 1511  Member hides non-virtual member 'Symbol' (Location)  --
  547.       The named member of a derived class hides a similarly
  548.       named member of a base class.  Moreover, the base class
  549.       member is not virtual.  Is this a mistake?  Was the base
  550.       member supposed to have been declared virtual?  By
  551.       unnecessarily using the same name, confusion could be
  552.       created.
  553. 1512  destructor for base class 'Symbol' (Location) is not
  554.       virtual  -- In a final pass through all the classes, we
  555.       have found a class (named in the message) that is the base
  556.       class of a derivation and has a destructor but the
  557.       destructor is not virtual.  It is conventional for
  558.       inherited classes to have virtual destructors so that it
  559.       is safe to 'delete' a pointer to a base class.   [19]
  560. 1513  storage class ignored  -- A storage class (one of auto,
  561.       extern, or register) was found within a class definition.
  562.       The only storage classes that are significant when
  563.       declaring members are static and typedef.   [11 section 9.2]
  564. 1514  Creating temporary to copy 'Type' to 'Type' (context:
  565.       Context)  -- A temporary was created in order to
  566.       initialize (or pass a value to or return a value to) a
  567.       reference.  This is suspect because any modification to
  568.       the value will be a modification of this temporary.  This
  569.       message is not issued when initializing a const reference.
  570.       [11 section 12.2]
  571. 1515  Default constructor not available for member 'Symbol'  --
  572.       A member of a class was found that had a type for which a
  573.       constructor was defined but for which a default
  574.       constructor (one with no arguments) was not defined.
  575. 1516  Data member hides inherited member 'Symbol' (Location)  --
  576.       A data member of a class happens to have the same name as
  577.       a member of a base class.  Was this deliberate?  Identical
  578.       names can cause confusion.  To inhibit this message for a
  579.       particular symbol or for an identifiable set of symbols
  580.       use -esym().
  581. 1520  Multiple assignment operators for class 'Symbol'  -- More
  582.       than one assignment operator has been declared for a given
  583.       class.  For example, for class X there may have been
  584.       declared:
  585.   void operator=(X);
  586.   void operator=(X) const;
  587.       Which is to be used for assignment?
  588. 1521  Multiple copy constructors for class 'Symbol'  -- For a
  589.       given class, more than one function was declared that
  590.       could serve as a copy constructor.  Typically this means
  591.       that you declared both X( X& ) and X( const X& ) for the
  592.       same class.  This is probably a mistake.
  593. 1522  Symbol 'Symbol' is an array of empty objects  -- An array
  594.       (Symbol) is being allocated.  Each member of the array
  595.       appears to be empty.  Although this is legal, it could be
  596.       the result of human error.  If this is deliberate policy,
  597.       inhibit the message, either globally, or for this Symbol.
  598. 1524  new in constructor for class 'Name' which has no explicit
  599.       destructor  -- A call to new has been found in a
  600.       constructor for a class for which no explicit destructor
  601.       has been declared.  A destructor was expected because how
  602.       else can the storage be freed?   [10 section 12.5]
  603. 1526  Member function 'Symbol' (Location) not defined  -- A
  604.       member function (named in the message) of a non-library
  605.       class was not defined.  This message is suppressed for
  606.       unit checkout (-u option).
  607. 1527  static member 'Symbol' (Location) not defined  -- A static
  608.       data member (named in the message) of a non-library class
  609.       was not defined.  In addition to its declaration within
  610.       the class, it must be defined in some module.
  611. 1528  call to String does not match function template String  --
  612.       The first String of the message designates an actual
  613.       function call that appeared to be the invocation of the
  614.       template function identified by the second String.  No
  615.       match could be made between the arguments of the call and
  616.       the template parameters.
  617. 1529  Symbol 'Symbol' not first checking for assignment to this
  618.       -- The assignment operator does not appear to be checking
  619.       for assignment of the value of a variable to itself
  620.       (assignment to this).  Specifically PC-lint/FlexeLint is
  621.       looking for one of:
  622.   if( &arg == this )
  623.   if( &arg != this )
  624.   if( this == &arg )
  625.   if( this != &arg )
  626.       as the first statement of the function.
  627.       It is important to check for a self assignment so as to
  628.       know whether the old value should be subject to a delete
  629.       operation.  This is often overlooked by a class designer
  630.       since it is counter-intuitive to assign to oneself.  But
  631.       through the magic of aliasing (pointers, references,
  632.       function arguments) it is possible for an unsuspecting
  633.       programmer to stumble into a disguised self-assignment
  634.       [12, Item 17].
  635.       If you are currently using the following test
  636.   if( arg == *this)
  637.       we recommend you replace this with the more efficient:
  638.    if( &arg == this || arg == *this)
  639. 1531  Symbol 'Symbol' (Location) should have compared argument
  640.       against sizeof(class)  -- This warning is given for either
  641.       operator new or operator delete when defined as member
  642.       functions of a class that is the base class of a
  643.       derivation.  In this case you can't be certain of the size
  644.       of allocation and therefore your allocation functions
  645.       should test the size parameter for equality to the sizeof
  646.       the class.  See Elective Note  1921 for more details.
  647. 1532  Symbol 'Symbol' not checking argument for NULL  -- This
  648.       message is given for a function operator delete which is a
  649.       member function of a class that does not have a
  650.       destructor.  It should check for NULL because delete p
  651.       where p has the NULL value will be passed in to it.  See
  652.       also  1922.
  653. 1533  Repeated friend declaration for symbol 'Symbol'  -- A
  654.       friend declaration for a particular symbol (class or
  655.       function) was repeated in the same class.  Usually this is
  656.       a harmless redundancy.
  657. 1534  static variable 'Symbol' found within inline function in
  658.       header  -- A static variable (Symbol) was found within an
  659.       inline function within a header file.  This can be a
  660.       source of error since the static variable will not retain
  661.       the same value across multiple modules.  Rather each
  662.       module will retain its own version of the variable.  If
  663.       multiple modules need to use the function then have the
  664.       function refer to an external variable rather than a
  665.       static variable.  Conversely if only one module needs to
  666.       use the function then place the definition of the function
  667.       within the module that requires it.  [23, Item 26].
  668. 1535  Exposing low access data through member 'Symbol'  -- A
  669.       member function is returning an address being held by the
  670.       indicated member symbol (presumably a pointer).  The
  671.       member's access (such as private or protected) is lower
  672.       than the access of the function returning the address.
  673. 1536  Exposing low access member 'Symbol'  -- A member function
  674.       is returning the non-const address of a member either
  675.       directly or via a reference.  Moreover, the member's
  676.       access (such as private or protected) is lower than the
  677.       access of the function returning the address.  For
  678.       example:
  679.     class X
  680.        {
  681.      private:
  682.        int a;
  683.      public:
  684.        int *f() { return &a; }
  685.        };
  686.       This looks like a breach of the access system  [12, Item
  687.       30].  You may lower the access rights of the function,
  688.       raise the accessibility of the member or make the return
  689.       value a const pointer or reference.  In the above example
  690.       you could change the function to:
  691.     const int *f() { return &a; }
  692. 1537  const function returns pointer data member 'Symbol'  -- A
  693.       const function is behaving suspiciously.  It is returning
  694.       a pointer data member (or equivalently a pointer to data
  695.       that is pointed to by a data member).  For example,
  696.     class X
  697.        {
  698.        int *p;
  699.        int *f() const { return p; }
  700.        };
  701.       Since f is supposedly const and since p is presumptively
  702.       pointing to data that is logically part of class X we
  703.       certainly have the potential for a security breach.
  704.       Either return a pointer to const or remove the const
  705.       modifier to the function.   [12, Item 29 ].
  706.       Note, if a const function returns the address of a data
  707.       member then a  605 (capability increase) is issued.
  708. 1538  base class 'Name' absent from initializer list for copy
  709.       constructor  -- The indicated base class did not appear in
  710.       the initializer list for a copy constructor.  Was this an
  711.       oversight?  If the initializer list does not contain an
  712.       initializer for a base class, the default constructor is
  713.       used for the base class.  This is not normally appropriate
  714.       for a copy constructor.  The following is more typical:
  715.     class B { ... };
  716.     class D : public B
  717.        {
  718.        D( const D &arg ) : B( arg ) { ... }
  719.        ...
  720.        };
  721. 1539  member 'Symbol' (Location) not assigned by assignment
  722.       operator  -- The indicated Symbol was not assigned by an
  723.       assignment operator.  Was this an oversight?  It is not
  724.       strictly necessary to initialize all members in an
  725.       assignment operator because the 'this' class is presumably
  726.       already initialized.  But it is easy to overlook the
  727.       assignment of individual members.  It is also easy to
  728.       overlook your responsibility to assign base class members.
  729.       This is not done for you automatically.  [12, Item 16]
  730.       The message is not given for const members or reference
  731.       members.  If you have a member that is deliberately not
  732.       initialized you may suppress the message for that member
  733.       only using -esym.
  734. 1540  pointer member 'Symbol' (Location) neither freed nor
  735.       zero'ed by destructor  -- The indicated member is a
  736.       non-static pointer member of a class that was apparently
  737.       not freed by the class' destructor.  Was this an
  738.       oversight?  By freeing, we mean either a call to the
  739.       free() function or use of the delete operator.  If the
  740.       pointer is only intended to point to static information
  741.       during its lifetime then, of course, it never should be
  742.       freed.  In that case you should signal closure by assign
  743.       ing it the NULL pointer (0).
  744. 1541  member 'Symbol' (Location) possibly not initialized by
  745.       constructor  -- The indicated member symbol may not have
  746.       been initialized by a constructor.  Was this an oversight?
  747.       Some of the paths that the constructor takes do initialize
  748.       the member.  See Section 9.
  749. 1542  member 'Symbol' (Location) possibly not initialized  --
  750.       The indicated member symbol may not have been initialized
  751.       before use.  Either this is in a constructor where it is
  752.       presumed that no members are pre-initialized or this is
  753.       after a statement removing its initialization such as a
  754.       delete or a free.  See Section 9.
  755. 1543  member 'Symbol' (Location) possibly not initialized  --
  756.       The indicated member symbol may not have been initialized
  757.       before a point where its address is being passed to a
  758.       constant pointer.  This looks suspicious.  Either this is
  759.       in a constructor where it is presumed that no members are
  760.       pre-initialized or this is after a statement removing its
  761.       initialization such as a delete or a free.
  762. 1544  value of variable 'Symbol' (Location) indeterminate (order
  763.       of initialization)  -- A variable (identified by Symbol)
  764.       was used in the run-time initialization of a static
  765.       variable.  However this variable itself was initialized at
  766.       run-time.  Since the order of initialization cannot be
  767.       predicted this is the source of possible error.
  768.       Whereas addresses are completely known at initialization
  769.       time values may not be.  Whether the value or merely the
  770.       address of a variable is used in the initialization of a
  771.       second variable is not an easy thing to determine when an
  772.       argument is passed by reference or via pointer.  For example,
  773.   class X
  774.      {
  775.      X( const X & );
  776.      };
  777.   extern X x1;
  778.   X x2 = x1;
  779.   X x1 = x2;
  780.       It is theoretically possible, but unlikely, that the
  781.       constructor X() is interested only in the address of its
  782.       argument and not its current value.  If so, it only means
  783.       you will be getting a spurious report, which you can
  784.       suppress based on variable name.  However, if the const is
  785.       missing when passing a reference parameter (or a pointer
  786.       parameter) then we cannot easily assume that values are
  787.       being used.  In this case no report will be issued.  The
  788.       moral is that if you want to get the checking implied by
  789.       this message you should make your constructor reference
  790.       arguments const.
  791. 1545  value of variable 'Symbol' used previously to initialize
  792.       variable 'Symbol' (Location)  -- A variable identified by
  793.       Symbol was used previously to initialize some other
  794.       variable.  This variable is now itself being initialized
  795.       with run-time code.  The order of these initializations
  796.       cannot be predicted.  See also message  1544.
  797. 1546  throw() called within destructor 'Symbol'  -- The body of
  798.       a destructor (signature provided within the message)
  799.       contains a throw not within a try block.  This is
  800.       dangerous because destructors are themselves triggered by
  801.       exceptions in sometimes unpredictable ways.  The result
  802.       can be a perpetual loop.   [23, Item 11]
  803. 1547  Assignment of array to pointer to base class (Context)  --
  804.       An assignment from an array of a derived class to a
  805.       pointer to a base class was detected.  For example:
  806.     class B { };
  807.     class D : public B {};
  808.     D a[10];
  809.     B *p = a;      // Warning 1547
  810.     B *q = &a[0];  // OK
  811.       In this example p is being assigned the address of the
  812.       first element of an array.  This is fraught with danger
  813.       since access to any element other than the zeroeth must be
  814.       considered an error (we presume that B and D actually have
  815.       or have the potential to have different sizes).   [23,
  816.       Item 3].
  817.       We do not warn about the assignment to q because it
  818.       appears that the programmer realizes the situation and
  819.       wishes to confine q to the base object of the zeroeth
  820.       element of a only.  As a further precaution against
  821.       inappropriate array access, out of bounds warnings are
  822.       issued for subsequent references to p[1] and q[1].
  823. 1548  Exception specification for 'Symbol' conflicts with
  824.       Location  -- The exception specification of a function
  825.       begins with the keyword 'throw' and follows the prototype.
  826.       Two declarations were found for the same function with
  827.       inconsistent exception specifications.
  828. 1549  Exception thrown for function 'Symbol' not declared to
  829.       throw  -- An exception was thrown (i.e., a throw was
  830.       detected) within a function and not within a try block;
  831.       moreover the function was not declared to throw anything.
  832.       The preferred remedy is to declare the function as
  833.       potentially throwing an exception.   [23, Item 11]
  834. 1550  function 'Symbol' may throw an exception in function
  835.       'Symbol'  -- A function was called (first Symbol) which
  836.       was declared to throw an exception.  The call was not made
  837.       from within a try block and the function making the call
  838.       was not declared to throw anything.  Either declare the
  839.       calling function as potentially throwing an exception, or
  840.       place the call inside a try block and catch the throw.
  841. 1551  function 'Symbol' may throw an exception in destructor
  842.       'Symbol'  -- A call to a function (name given by the first
  843.       Symbol) was made from within a destructor.  The function
  844.       was declared as potentially throwing an exception.  Such
  845.       exceptions need to be caught within a try block because
  846.       destructors should never throw exceptions.  [23, Item 11].
  847. 1552  Converting pointer to array-of-derived to pointer to base
  848.       -- This warning is similar to Warning  1547 and is
  849.       sometimes given in conjunction with it.  It uses value
  850.       tracking to determine that an array (that could be
  851.       dynamically allocated) is being assigned to a base class
  852.       pointer.
  853.       For example,
  854.     Derived *d = new Derived[10];
  855.     Base *b;
  856.     b = d;      // Warning 1552
  857.     b = &d[0];  // OK
  858.       [23, Item 3]  Also, see the article by Mark Nelson (Bug++
  859.       of the Month, Windows developer's Journal, May 1997, pp. 43-44).
  860. 1553  struct 'Symbol' declared as extern "C" contains C++
  861.       substructure 'Symbol' (Location)  -- A C++ substructure
  862.       was found in a structure or class declared as extern "C".
  863.       Was this intended?
  864. 1554  Direct pointer copy of member 'Symbol' within copy
  865.       constructor: 'Symbol'  -- In a copy constructor a pointer
  866.       was merely copied rather than recreated with new storage.
  867.       This can create a situation where two objects have the
  868.       same data and this, in turn, causes problems when these
  869.       objects are deleted or modified.  For example, the
  870.       following class will draw this warning:
  871.   class X
  872.      {
  873.      char *p;
  874.      X( const X & x )
  875.         { p = x.p; }
  876.      ...
  877.      };
  878.       Here, member p is expected to be recreated using new or
  879.       some variant.
  880. 1555  Direct pointer copy of member 'Symbol' within copy
  881.       assignment operator: 'Symbol'  -- In a copy assignment
  882.       operator a pointer was merely copied rather than recreated
  883.       with new storage.  This can create a situation where two
  884.       objects have the same data and this, in turn, causes
  885.       problems when these objects are deleted or modified.  For
  886.       example, the following class will draw this warning:
  887.   class X
  888.      {
  889.      char *p;
  890.      X& operator=( const X & x )
  891.         { p = x.p; }
  892.      ...
  893.      };
  894.       Here, member p is expected to be recreated using new or
  895.       some variant.
  896. 1556  'new Type(integer)' is suspicious  -- A new expression had
  897.       the form new T(Integer) where type T has no constructor.
  898.       For example:
  899.   new int(10);
  900.       will draw this warning.  The expression allocates an area
  901.       of storage large enough to hold one integer.  It then
  902.       initializes that integer to the value 10.  Could this have
  903.       been a botched attempt to allocate an array of 10
  904.       integers?  Even if it was a deliberate attempt to allocate
  905.       and initialize a single integer, a casual inspection of
  906.       the code could easily lead a reader astray.
  907.       The warning is only given when the type T has no
  908.       constructor.  If T has a constructor then either a
  909.       syntactic error will result because no constructor matches
  910.       the argument or a match will be found.  In the latter case
  911.       no warning will or should be issued.
  912. 1557  const member 'Symbol' is not initialized  -- A class
  913.       member typed const class (or struct or union) is mentioned
  914.       in a constructor initializer list.  But the class (or
  915.       struct or union) referenced has no constructor and hence
  916.       the member is not initialized.  See also message  1769.
  917. 1559  Uncaught exception 'Name' may be thrown in destructor
  918.       'Symbol'  -- The named exception occurred within a try
  919.       block and was either not caught by any handler or was
  920.       caught but then thrown from the handler.  Destructors
  921.       should normally not throw exceptions  [23, Item 11].
  922. 1560  Uncaught exception 'Name' not on throw-list of function
  923.       'Symbol'  -- A direct or indirect throw of the named
  924.       exception occurred within a try block and was either not
  925.       caught by any handler or was rethrown by the handler.
  926.       Uncaught exceptions should normally be declared in the
  927.       function's exception specification.
  928. 1561  Reference initialization causes loss of const/volatile
  929.       integrity (Context)  -- A reference initialization is
  930.       resulting in a capability gain that can cause a loss of
  931.       const or volatile integrity.
  932.       Typically the message is given on initializing a non-const
  933.       reference with a const.  For example:
  934.   void f( int &x );
  935.   const int n = 0;
  936.   ...
  937.   f(n);
  938.       Here, function f() could assign a value to its argument
  939.       and thereby modify n, which is declared to be const.
  940.       The message can also be issued when a pointer is
  941.       initialized.  Consider the following example.
  942.   void h( const int *&q );
  943.   int *p;
  944.   ...
  945.   h(p);
  946.       It might seem that passing a regular (i.e., non-const)
  947.       pointer to a const int * could cause no harm.  That would
  948.       be correct if it were not for the reference.  If function
  949.       h() were to assign a pointer to const to its parameter q
  950.       then upon return from the call, p could be used to modify
  951.       const data.
  952.       There are many subtle cases that can boggle the mind.  See
  953.       the commentary to Message  605.
  954. 17.9  C++ Informational Messages
  955. 1701  redundant access-specifier 'String'  -- The given access
  956.       specifier (one of 'public', 'private' or 'protected') has
  957.       been repeated.   [11 section 11.1]
  958. 1702  operator 'Name' is both an ordinary function 'String' and
  959.       a member function 'String'  -- In attempting to resolve
  960.       the definition of an operator it was found that the same
  961.       operator was declared as both a member function and a
  962.       non-member function.  Was this intended?  Symmetric binary
  963.       operators (such as '+', '-', '==', '>', etc.) are usually
  964.       defined external to a class definition so that they can
  965.       support non-objects on the left hand side.
  966.       [11 section 13.4.2]
  967. 1703  Function 'String' arbitrarily selected.  Refer to Error
  968.       'Integer'  -- This informational message is given with
  969.       error numbers  1023,  1024,  1025 and  1026.  These are
  970.       issued when an error is encountered during the overload
  971.       resolution process, and is issued merely to indicate which
  972.       function was arbitrarily selected.   [11 section 13.2]
  973. 1704  Constructor 'Symbol' has private access specification  --
  974.       A private constructor is legal and has its uses but can
  975.       also result in messages that are difficult to interpret.
  976.       If you use private constructors as a programming technique
  977.       then you may suppress this message with a -e1704.  But
  978.       it's probably better to suppress this on a constructor by
  979.       constructor basis using -esym.
  980. 1705  static class member may be accessed by the scoping
  981.       operator  -- A static class member was accessed using a
  982.       class object and -> or . notation.  For example:
  983.   s.member
  984.      or
  985.   p->member
  986.       But an instance of the object is not necessary.  It could
  987.       just as easily have been referenced as:
  988.   X::member
  989.       where X is the class name.   [10 section 9.4]
  990. 1706  Declaration with scope operator is unusual within a class
  991.       -- Class members within a class are not normally declared
  992.       with the scope operator.  For example:
  993.   class X  {  int X::n; ...
  994.       will elicit this message.  If the (redundant) class
  995.       specification (X::) were replaced by some different class
  996.       specification and the declaration was not friend an error
  997.       ( 1040) would be issued.   [11 section 9.2]
  998. 1707  static assumed for String  -- operator new() and operator
  999.       delete(), when declared as member functions, should be
  1000.       declared as static.  They do not operate on an object
  1001.       instantiation (implied this pointer).   [11 section 12.5]
  1002. 1708  typedef 'Symbol not declared as "C" conflicts with
  1003.       Location  -- A typedef symbol previously declared as
  1004.       extern "C" was not so declared at the current location.
  1005.       This is not considered as serious a situation as is
  1006.       indicated by message  1065, which is given for external
  1007.       function and variable names.  If this is your programming
  1008.       style you may suppress this message.
  1009. 1709  typedef 'Symbol' declared as "C" conflicts with Location
  1010.       -- A typedef symbol was previously not declared as extern
  1011.       "C" but is so declared at the current location.  This is
  1012.       not considered as serious a situation as is indicated by
  1013.       message  1066, which is given for external function and
  1014.       variable names.  If this is your programming style you may
  1015.       suppress this message.
  1016. 1711  class 'Symbol' (Location) has a virtual function but is
  1017.       not inherited  -- The given class has a virtual function
  1018.       but is not the base class of any derivation.  Was this a
  1019.       mistake?  There is no advantage to making member functions
  1020.       virtual unless their class is the base of a derivation
  1021.       tree.  In fact, there is a disadvantage because there is a
  1022.       time and space penalty for virtual functions.  This
  1023.       message is not given for library classes and is suppressed
  1024.       for unit checkout.   [13 section 4]
  1025. 1712  default constructor not defined for class 'Name'  -- A
  1026.       class was defined with one or more constructors but none
  1027.       of these could be used as a (0 argument) default
  1028.       constructor.  Is this an omission? The default constructor
  1029.       is used in declarations and for new when no explicit
  1030.       initialization is given.  It is also used when the class
  1031.       is a base class and no mem-initializer is given.  It is
  1032.       used for arrays as well.  A default constructor should
  1033.       therefore be omitted only for good reason.  If you have
  1034.       such a good reason for class X you can employ option
  1035.       -esym(1712,X).   [19]
  1036. 1713  Redundant parentheses ignored  -- A vacuous initializer
  1037.       within a new-initializer for an object for which a
  1038.       constructor was not defined is a "syntactic convenience
  1039.       and has no special meaning".  For example, new double is
  1040.       the same as new double().   [11 section 5.3.3]
  1041. 1714  Member function 'Symbol' (Location) not referenced  -- A
  1042.       member function was not referenced.  This message is
  1043.       automatically suppressed for unit checkout (-u) and for
  1044.       members of a library class.
  1045. 1715  static member 'Symbol' (Location) not referenced  -- A
  1046.       static data member of a class was not referenced.  This
  1047.       message is automatically suppressed for unit checkout (-u)
  1048.       and for members of a library class.
  1049. 1716  Virtual member function 'Symbol' (Location) not referenced
  1050.       -- A virtual member function was apparently not
  1051.       referenced.  Not only was the function itself not
  1052.       referenced but the function or functions that it overrides
  1053.       were not referenced either.  The message is not given if
  1054.       the member function itself or any member function that it
  1055.       overrides is a library member function.  This is because
  1056.       the original virtual function may be called implicitly by
  1057.       the library.
  1058.       This message is suppressed for unit checkout (-u).
  1059. 1717  empty prototype for function declaration, assumed '(void)'
  1060.       -- An empty prototype, as in:
  1061.   void  f();
  1062.       has a different meaning in C than in C++.  In C it says
  1063.       nothing about the arguments of the function; in C++, it
  1064.       says there are no arguments.  This message is not given
  1065.       for member function declarations or for function
  1066.       definitions.  Rather, weaker Elective Notes ( 1917 and
  1067.       1918) are given.  This is because the chance of ambiguity
  1068.       does not exist in these cases.   [11 section 8.2.5]
  1069. 1718  expression within brackets ignored  -- In the expression:
  1070.   delete  [ expression ]  p
  1071.       the expression is ignored.  The expression is a vestige of
  1072.       an earlier time when this information provided a count of
  1073.       the number of items in the array being released.  Note
  1074.       that empty square brackets are considered necessary for
  1075.       deleting an array.  This is a complaint directed toward
  1076.       the expression within the brackets not the brackets
  1077.       themselves.   [11 section 5.3.4]
  1078. 1719  assignment operator for class 'Symbol' has non-reference
  1079.       parameter  -- The typical assignment operator for a class
  1080.       is of the form:
  1081.   X& operator =(const X &)
  1082.       If the argument is not a reference then your program is
  1083.       subject to implicit function calls and less efficient
  1084.       operation.   [11 section 13.4.3]
  1085. 1720  assignment operator for class 'Symbol' has non-const
  1086.       parameter  -- The typical assignment operator for a class
  1087.       is of the form:
  1088.   X& operator =(const X &)
  1089.       If the argument is not const then your program will not be
  1090.       diagnosed as completely as it might otherwise be.   [11
  1091.       section 13.4.3]
  1092. 1721  operator =() for class 'Symbol' is not assignment operator
  1093.       -- The assignment operator for a class has the form:
  1094.   X& operator =(const X &)
  1095.        A member function whose name is operator =, but does not
  1096.       have that form, is not an assignment operator.  This could
  1097.       be a source of subtle confusion for a program reader.  If
  1098.   this is not an error you may selectively suppress this  
  1099.   message for the given class.   [11 section 13.4.3]
  1100. 1722  assignment operator for class 'Symbol' does not return a
  1101.       reference to class  -- The typical assignment operator for
  1102.       a class X is of the form:
  1103.   X& operator =(const X &);
  1104.       The reason for returning a reference to class is to
  1105.       support multiple assignment as in:
  1106.   a = b = c
  1107.       [11 section 13.4.3]
  1108. 1724  Argument to copy constructor for class 'Symbol' should be
  1109.       a const reference  -- A copy constructor for class X is
  1110.       typically declared as:
  1111.   X( const X & );
  1112.       If you leave off the 'const' then some diagnostics will
  1113.       not be possible.   [19]
  1114. 1725  class member 'Symbol' is a reference  -- There are a
  1115.       number of subtle difficulties with reference data members.
  1116.       If a class containing a reference is assigned, the default
  1117.       assignment operator will presumably copy the raw
  1118.       underlying pointer.  This violates the principle that a
  1119.       reference's underlying pointer, once established, is never
  1120.       modified.  Some compilers protect against this eventuality
  1121.       by refusing to create a default assignment operator for
  1122.       classes containing references.  Similar remarks can be
  1123.       made about copy constructors.  If you are careful about
  1124.       how you design your copy constructors and assignment
  1125.       operators, then references within classes can be a useful
  1126.       programming technique.  They should not, however, be
  1127.       employed casually.   [21 section 2.1.3]
  1128. 1726  taking address of overloaded function name 'Symbol'  -- A
  1129.       reference is being made to an overloaded function without
  1130.       an immediately following '('.  Thus there is no argument
  1131.       list to distinguish the function intended.  Resolution of
  1132.       the overloaded name can only be made by analyzing the
  1133.       destination.  Is this what the programmer intended?  [11
  1134.       section 13.3]
  1135. 1727  inline 'Symbol' not previously defined inline at
  1136.       (Location)  -- A function declared or defined inline was
  1137.       not previously declared inline.  Was this intended?  If
  1138.       this is your standard practice then suppress this message.
  1139.       [11 section 9.3.2]
  1140. 1728  Symbol 'Symbol' was previously defined inline at
  1141.       (Location)  -- A function was previously declared or
  1142.       defined inline.  The inline modifier is absent from the
  1143.       current declaration or definition.  Was this intended?  If
  1144.       this is your standard practice then suppress this message.
  1145.       [11 section 9.3.2]
  1146. 1729  Initializer inversion detected for member 'Symbol'  -- In
  1147.       a constructor initializer the order of evaluation is
  1148.       determined by the member order not the order in which the
  1149.       initializers are given.  At least one of the initializers
  1150.       was given out of order. Was there a reason for this?  Did
  1151.       the programmer think that by changing the order that
  1152.       he/she would affect the order of evaluation?  Place the
  1153.       initializers in the order of their occurrence within the
  1154.       class so that there can be no mistaken assumptions.
  1155.       [12, Item 13]
  1156. 1730  class/struct inconsistency for symbol 'Symbol' (conflicts
  1157.       with Location)  -- An object is declared both with the
  1158.       keyword class and with the keyword struct.  Though this is
  1159.       legal it is suspect.   [11 section 7.1.6]
  1160. 1732  new in constructor for class 'Name' which has no
  1161.       assignment operator  -- Within a constructor for the cited
  1162.       class, there appeared a new.  However, no assignment
  1163.       operator was declared for this class.  Presumably some
  1164.       class member (or members) points to dynamically allocated
  1165.       memory.  Such memory is not treated properly by the
  1166.       default assignment operator.  Normally a custom assignment
  1167.       operator would be needed.  Thus, if x and y are both of
  1168.       type Symbol
  1169.   x = y;
  1170.       will result in pointer duplication.  A later delete would
  1171.       create chaos.   [12, Item 11]
  1172. 1733  new in constructor for class 'Name' which has no copy
  1173.       constructor  -- Within a constructor for the cited class,
  1174.       there appeared a new.  However, no copy constructor was
  1175.       declared for this class.  Presumably, because of the new,
  1176.       some class member (or members) points to dynamically allo
  1177.       cated memory.  Such memory is not treated properly by the
  1178.       default copy constructor.  Normally a custom copy
  1179.       constructor would be needed.   [12, Item 11]
  1180. 1734  Had difficulty compiling template function: 'Symbol'  --
  1181.       At template wrap-up time where there is an attempt to
  1182.       'compile' each template function according to arguments
  1183.       provided, the cited function could not be processed fully.
  1184.       The difficulty may be the result of syntax errors cited
  1185.       earlier and if these errors are repaired then this message
  1186.       should go away.
  1187. 1735  Virtual function 'Symbol' has default parameter  -- A
  1188.       virtual function was detected with a default parameter.
  1189.       For example:
  1190.   class B
  1191.      {
  1192.        virtual void f( int n = 5 );
  1193.        ...
  1194.        };
  1195.       The difficulty is that every virtual function f overriding
  1196.       this virtual function must contain a default parameter and
  1197.       its default parameter must be identical to that shown
  1198.       above.  If this is not done, no warnings are issued but
  1199.       behavior may have surprising effects.  This is because
  1200.       when f() is called through a base class pointer (or
  1201.       reference) the function is determined from the actual type
  1202.       (the dynamic type) and the default argument is determined
  1203.       from the nominal type (the static type).   [12, Item 38].
  1204. 1736  Redundant access specifier (String)  -- An access
  1205.       specifier (one of public, private, or protected as shown
  1206.       in String) is redundant.  That is, the explicitly given
  1207.       access specifier did not have to be given because an
  1208.       earlier access specifier of the same type is currently
  1209.       active.  This message is NOT given for an access specifier
  1210.       that is the first item to appear in a class definition.
  1211.       Thus
  1212.     class abc { private:  ...
  1213.       does not draw this message.  The reason this message is
  1214.       issued is because it is very easy to make the following
  1215.       mistake.
  1216.     class A
  1217.        {
  1218.      public:   // declare private members:
  1219.        ...
  1220.      public:   // declare public members:
  1221.        ...
  1222.       In general there are no compiler warnings that would
  1223.       result from such an unintentional botch.
  1224. 1737  Symbol 'Symbol' hides global operator new  -- The
  1225.       indicated Symbol is a class member operator new.  It is
  1226.       not compatible with the global operator new and, moreover,
  1227.       no other operator new within the class is argument list
  1228.       compatible with the global operator new.  For this reason
  1229.       the user of these classes will get a surprise if he/she
  1230.       calls for new X where X is the class name.  It will be
  1231.       greeted with an error.  The solution is to define a single
  1232.       argument operator new as a class member.   [12, Item 9].
  1233. 1738  non-copy constructor 'Symbol' used to initialize copy
  1234.       constructor  -- In an initializer list for a copy
  1235.       constructor, a base class constructor was invoked.
  1236.       However, this base class constructor was not itself a copy
  1237.       constructor.  We expect that copy constructors will invoke
  1238.       copy constructors.  Was this an oversight or was there
  1239.       some good reason for choosing a different kind of con
  1240.       structor?  If this was deliberate, suppress this message.
  1241.       See also message  1538.
  1242. 1739  Binary operator 'Symbol' should be non-member function  --
  1243.       The indicated function was declared as a member function.
  1244.       There were a number of indicators to suggest that it
  1245.       should have been a non-member function.  The class, X of
  1246.       which it was a member has a constructor that could be used
  1247.       to convert numeric values to X.  The parameter to the
  1248.       operator was X or its equivalent.  For this reason the
  1249.       operator would behave unsymmetrically.  A numeric value on
  1250.       the right hand side would be promoted but not a value on
  1251.       the left hand side.  For example, X op 27 would work but
  1252.       27 op X would not.   [12, Item 19].
  1253. 1740  pointer member 'Symbol' (Location) not directly freed or
  1254.       zero'ed by destructor  -- A destructor did not free or
  1255.       zero a pointer member.  However, it did call out to
  1256.       another (non-const) member function which may have done
  1257.       the required work.  This Informational message is a
  1258.       companion to Warning  1540, which covers the situation
  1259.       where no member function is called from within the
  1260.       destructor.
  1261. 1741  member 'Symbol' (Location) conceivably not initialized by
  1262.       constructor  -- The indicated member symbol may not have
  1263.       been initialized by a constructor.  Was this an oversight?
  1264.       There appears to be a path through a loop that does
  1265.       initialize the member and the warning is issued because it
  1266.       is not clear that the loop is always executed at least
  1267.       once.  See Section 9.
  1268. 1742  member 'Symbol' (Location) conceivably not initialized  --
  1269.       The indicated member symbol conceivably may not have been
  1270.       initialized by a constructor.  Was this an oversight?
  1271.       Some of the execution paths that the constructor takes, do
  1272.       initialize the member.  See Section 9.
  1273. 1743  member 'Symbol' (Location) conceivably not initialized  --
  1274.       The indicated member symbol conceivably may not have been
  1275.       initialized before use.  Either this is in a constructor
  1276.       where it is presumed that no members are pre-initialized
  1277.       or this is after a statement removing its initialization
  1278.       such as a delete or a free.  See Section 9.
  1279. 1744  member 'Symbol' (Location) possibly not initialized by
  1280.       private constructor  -- The designated member was possibly
  1281.       not initialized by a private constructor.  This message is
  1282.       similar to messages  1401,  1541 and  1741, which are
  1283.       given for ordinary (non private) constructors.  It is
  1284.       given a special error number because a private constructor
  1285.       may be one that, by design, is never called and variables
  1286.       may be deliberately left uninitialized.  In that case this
  1287.       message should be suppressed.
  1288. 1745  member 'Symbol' (Location) not assigned by private
  1289.       assignment operator  -- The indicated Symbol was not
  1290.       assigned by a private assignment operator.  This is very
  1291.       much like Warning  1539 except that the assignment
  1292.       operator in question is private.  A private assignment
  1293.       operator may simply be a device to thwart unintended use
  1294.       of the assignment operator.  In this case you may not care
  1295.       about unassigned members.  If this is so, suppress this
  1296.       message.
  1297.       The message is not given for const members or reference
  1298.       members.   [12, Item 16]
  1299. 1746  parameter 'Symbol' of function 'Symbol' could be made
  1300.       const reference  -- The indicated parameter is a candidate
  1301.       to be declared as a const reference.  For example: 
  1302. void f( X x )
  1303.    {
  1304.    // x not modified.
  1305.    }
  1306.       Then the function definition can be replaced with:
  1307. void f( const X &x )
  1308.    {
  1309.    // x not modified.
  1310.    }
  1311.       The result is more efficient since less information needs
  1312.       to be placed onto the stack and a constructor need not be
  1313.       called.
  1314.       The message is only given with class-like arguments
  1315.       (including struct's and union's) and only if the parameter
  1316.       is not subsequently modified or potentially modified by
  1317.       the function.  The parameter is potentially modified if it
  1318.       is passed to a function whose corresponding parameter is a
  1319.       reference (not const) or if its address is passed to a
  1320.       non-const pointer.   [12, Item 22].
  1321.  1747  binary operator 'Symbol' returning a reference  -- An
  1322.       operator-like function was found to be returning a
  1323.       reference.  For example:
  1324. X &operator+ ( X &, X & );
  1325.       This is almost always a bad idea.   [12, Item 23].  You
  1326.       normally can't return a reference unless you allocate the
  1327.       object, but then who is going to delete it.  The usual way
  1328.       this is declared is:
  1329. X operator+ ( X &, X & );
  1330. 1748  non-virtual base class 'Name' included twice in class
  1331.       'Name'  -- Through indirect means, a given class was
  1332.       included at least twice as a base class for another class.
  1333.       At least one of these is not virtual.  Although legal,
  1334.       this may be an oversight.  Such base classes are usually
  1335.       marked virtual resulting in one rather than two separate
  1336.       instances of the base class.  This is done for two rea
  1337.       sons.  First, it saves memory; second, references to
  1338.       members of such a base class will not be ambiguous.
  1339. 1749  base class 'Symbol' of class 'Symbol' need not be virtual
  1340.       -- The designated base class is a direct base class of the
  1341.       second class and the derivation was specified as
  1342.       'virtual'.  But the base class was not doubly included
  1343.       (using this link) within any class in the entire project.
  1344.       Since a virtual link is less efficient than a normal link
  1345.       this may well be an unenlightened use of 'virtual'.  [23,
  1346.       Item 24].  The message is inhibited if unit checkout (-u)
  1347.       is selected.
  1348. 1750  local template 'Symbol' (Location) not referenced  -- A
  1349.       'local' template is one that is not defined in a header
  1350.       file.  The template was not used in the module in which it
  1351.       was defined.
  1352. 1752  catch parameter Integer is not a reference  -- This
  1353.       message is issued for every catch parameter that is not a
  1354.       reference and is not numeric.  The problem with pointers
  1355.       is a problem of ownership and delete responsibilities; the
  1356.       problem with a non-ref object is the problem of slicing
  1357.       away derivedness  [23, Item 13].
  1358. 1753  Overloading special operator 'Symbol'  -- This message is
  1359.       issued whenever an attempt is made to declare one of these
  1360.       operators as having some user-defined meaning:
  1361. operator ||
  1362. operator &&
  1363. operator ,
  1364.       The difficulty is that the working semantics of the
  1365.       overloaded operator is bound to be sufficiently different
  1366.       from the built-in operators, as to result in possible
  1367.       confusion on the part of the programmer.  With the
  1368.       built-in versions of these operators, evaluation is
  1369.       strictly left-to-right.  With the overloaded versions,
  1370.       this is not guaranteed.  More critically, with the
  1371.       built-in versions of && and ||, evaluation of the 2nd
  1372.       argument is conditional upon the result of the first.
  1373.       This will never be true of the overloaded version.  [23,
  1374.       Item 7].
  1375. 1754  Expected symbol 'Symbol' to be declared for class 'Symbol'
  1376.       -- The first Symbol is of the form: operator op= where op
  1377.       is a binary operator.  A binary operator op was declared
  1378.       for type X where X is identified by the second Symbol.
  1379.       For example, the appearance of:
  1380. X operator+( const X &, const X & );
  1381.       somewhere in the program would suggest that a += version
  1382.       appear as a member function of class X.  This is not only
  1383.       to fulfill reasonable expectations on the part of the
  1384.       programmer but also because operator+= is likely to be
  1385.       more efficient than operator+ and because operator+ can be
  1386.       written in terms of operator+=.   [23, Item 22]
  1387.       The message is also given for member binary operators.  In
  1388.       all cases the message is not given unless the return value
  1389.       matches the first argument (this is the implicit argument
  1390.       in the case of a member function).
  1391. 1755  global template 'Symbol' (Location) not referenced  -- A
  1392.       'global' template is one defined in a header file.  This
  1393.       message is given for templates defined in non-library
  1394.       header files.  The template is not used in any of the
  1395.       modules comprising the program.  The message is suppressed
  1396.       for unit checkout (-u).
  1397. 1757  Discarded instance of post decrement/increment  -- A
  1398.       postfix increment or postfix decrement operator was used
  1399.       in a context in which the result of the operation was
  1400.       discarded.  For example:
  1401. X a;
  1402. ...
  1403. a++;
  1404.       In such contexts it is just as correct to use prefix
  1405.       decrement/increment.  For example this could be replaced
  1406.       with:
  1407. X a;
  1408. ...
  1409. ++a;
  1410.       The prefix form is (or should be) more efficient than the
  1411.       postfix form because, in the case of user-defined types,
  1412.       it should return a reference rather than a value (see
  1413.       1758 and  1759).  This presumes that the side effects of
  1414.       the postfix form are equivalent to those of the prefix
  1415.       form.  If this is not the case then either make them
  1416.       equivalent (the preferred choice) or turn this message
  1417.       off.   [23, Item 6].
  1418. 1758  Prefix increment/decrement operator 'Symbol' returns a
  1419.       non-reference  -- To conform with most programming
  1420.       expectations, a prefix increment/decrement operator should
  1421.       return a reference.  Returning a reference is both more
  1422.       flexible and more efficient  [23, Item 6].
  1423.       The expected form is as shown below:
  1424. class X
  1425.    {
  1426.    X & operator++();     // prefix operator
  1427.    X operator++( int );  // postfix operator
  1428.    ...
  1429.    };
  1430. 1759  Postfix increment/decrement operator 'Symbol' returns a
  1431.       reference.  -- To conform with most programming
  1432.       expectations, a postfix increment/decrement operator
  1433.       should return a value as opposed to a reference.
  1434.       [23, Item 6].  See example in message  1758.
  1435. 1760  Redundant template 'Symbol' defined identically at
  1436.       Location  -- A template was defined identically in the
  1437.       same module.  Was this a mistake?
  1438. 1761  Declaration of function 'Symbol' hides overloaded function
  1439.       'Symbol' (Location)  -- A function declaration hides an
  1440.       overloaded function.  This does not contribute to the
  1441.       overloaded-ness of the function but completely hides all
  1442.       the overloaded functions in some prior scope.  If this is
  1443.       your intent suppress this message.
  1444. 1762  Member function 'Symbol' could be made const  -- The
  1445.       indicated (non-static) member function did not modify
  1446.       member data and did not call non-const functions.
  1447.       Moreover, it does not make any deep modification to the
  1448.       class member.  A modification is considered deep if it
  1449.       modifies information indirectly through a class member
  1450.       pointer.  Therefore it could and probably should be
  1451.       declared as a const member function.  See also Info  1763
  1452.       and Elective Note  1962.
  1453. 1763  Member function 'Symbol' marked as const indirectly
  1454.       modifies class  -- The designated symbol is a member
  1455.       function declared as const.  Though technically valid, the
  1456.       const may be misleading because the member function
  1457.       modifies (or exposes) information indirectly referenced by
  1458.       the object.  For example:
  1459.   class X
  1460.      {
  1461.      char *pc;
  1462.      char & get(int i) const { return pc[i]; }
  1463.      };
  1464.       results in Info 1763 for function X::get.  This is because
  1465.       the function exposes information indirectly held by the
  1466.       class X.
  1467.       Experts  [24] recommend that a pair of functions be made
  1468.       available in this situation:
  1469.   class X
  1470.      {
  1471.      char *pc;
  1472.      const char & get(int i) const { return pc[i]; }
  1473.      char & get(int i) { return pc[i]; }
  1474.      };
  1475.       In this way, if the object is const then only the const
  1476.       function will be called, which will return the protected
  1477.       reference.  Related messages are also  1762 and  1962.
  1478.       See also  [12, Item 29] for a further description.
  1479. 1764  Reference parameter could be declared const reference  --
  1480.       As an example:
  1481.   int f( int & k ) { return k; }
  1482.       can be redeclared as:
  1483.   int f( const int & k ) { return k; }
  1484.       Declaring a parameter a reference to const offers
  1485.       advantages that a mere reference does not.  In particular,
  1486.       you can pass constants, temporaries and const types into
  1487.       such a parameter where otherwise you may not.  In addition
  1488.       it can offer better documentation.
  1489.       Other situations in which a const can be added to a
  1490.       declaration are covered in messages  818,  952,  953 and 954.
  1491. 1768  Virtual function 'Symbol' has an access (String) different
  1492.       from the access (String) in the base class (String) -- An
  1493.       overriding virtual function has an access (public,
  1494.       protected or private) in the derived class different from
  1495.       the access of the overridden virtual function in the base
  1496.       class.  Was this an oversight?  Since calls to the
  1497.       overriding virtual function are usually made through the
  1498.       base class, making the access different is unusual (though
  1499.       legal).
  1500. 1769  Member or base class 'Symbol' has no constructor  -- An
  1501.       initializer of the form Symbol() is ignored.  Symbol is
  1502.       either a class member with a class, struct, or union type
  1503.       or is a base class.  In either case the class (or struct
  1504.       or union) has no constructor and hence what appears to be
  1505.       an initialization is not.  See also message  1557.
  1506. 1770  function 'Symbol' defined without function 'String'  -- A
  1507.       typical Info 1770 message is:
  1508.    function 'operator new(unsigned)' defined without function
  1509.    'operator delete'
  1510.       There are three others:
  1511.     operator delete without an operator new,
  1512.     operator new[] without an operator delete[], and
  1513.     operator delete[] without an operator new[].
  1514.       In general it is not a good idea to create one of these
  1515.       functions without the other in the pairing.   [23, Item 27]
  1516.       You can suppress any of these without suppressing them
  1517.       all.  Simply do a -esym(1770,name) where name is the first
  1518.       function named in the message.
  1519. 1771  function 'Symbol' replaces global function  -- This
  1520.       message is given for operator new and operator delete (and
  1521.       for their [] cousins) when a definition for one of these
  1522.       functions is found.  Redefining the built-in version of
  1523.       these functions is not considered sound programming
  1524.       practice.   [23, Item 27]
  1525. 1772  Assignment operator 'Symbol' is not returning *this  --
  1526.       The assignment operator should return *this.  This is to
  1527.       allow for multiple assignments as in:
  1528.   a = b = c;
  1529.       It is also better to return the object that has just been
  1530.       modified rather than the argument.   [12, Item 15]
  1531. 1773  Attempt to cast away const (or volatile)  -- An attempt
  1532.       was made to cast away const.  This can break the integrity
  1533.       of the const system.  This message will be suppressed if
  1534.       you use const_cast.  Thus:
  1535.   char *f( const char * p )
  1536.      {
  1537.      if( test() )
  1538.         return (char *) p;   // Info 1773
  1539.      else
  1540.         return const_cast<char *>(p);   // OK
  1541.      }
  1542.       See  [12, Item 21].
  1543. 1774  Could use dynamic_cast to downcast ptr to polymorphic type
  1544.       'Symbol'  -- A downcast was detected of a pointer to a
  1545.       polymorphic type (i.e., one with virtual functions).  A
  1546.       dynamic_cast could be used to cast this pointer safely.
  1547.       For example:
  1548. class B { virtual ~B(); };
  1549. class D : public B {};
  1550. ...
  1551. D *f( B *p )
  1552.    {
  1553.    return dynamic_cast<D*>(p);
  1554.    }
  1555.       In the above example, if p is not a pointer to a D then
  1556.       the dynamic cast will result in a NULL pointer value.  In
  1557.       this way, the validity of the conversion can be directly
  1558.       tested.
  1559.       B needs to be a polymorphic type in order to use
  1560.       dynamic_cast.  If B is not polymorphic, message 1939 is
  1561.       issued.
  1562. 1775  catch block does not catch any declared exception  -- A
  1563.       catch handler does not seem to catch any exceptions.  For
  1564.       example:
  1565. try { f(); }
  1566. catch( B& ) {}
  1567. catch( D& ) {}      // Info 1775
  1568. catch( ... ) {}
  1569. catch( char * ) {}  // Info 1775
  1570.       If f() is declared to throw type D, and if B is a public
  1571.       base class of D, then the first catch handler will process
  1572.       that exception and the second handler will never be used.
  1573.       The fourth handler will also not be used since the third
  1574.       handler will catch all exceptions not caught by the first
  1575.       two.
  1576.       If f() is not declared to throw an exception then Info
  1577.       1775 will be issued for all four catch handlers.
  1578. 1776  Converting string literals to char * is deprecated
  1579.       (Context)  -- A string literal, according to Standard C++
  1580.       is typed an array of const char.  This message is issued
  1581.       when such a literal is assigned to a non-const pointer.
  1582.       For example:
  1583. char *p = "string";
  1584.       will trigger this message.  This pointer could then be
  1585.       used to modify the string literal and that could produce
  1586.       some very strange behavior.
  1587.       Such an assignment is legal but "deprecated" by the C++
  1588.       Standard.  The reason for not ruling it illegal is that
  1589.       numerous existing functions have their arguments typed as
  1590.       char * and this would break working code.
  1591.       Note that this message is only given for string literals.
  1592.       If an expression is typed as pointer to const char in some
  1593.       way other than via string literal, then an assignment of
  1594.       that pointer to a non-const pointer will receive a more
  1595.       severe warning.
  1596. 17.10  C++ Elective Notes
  1597. 1901  Creating a temporary of type 'Symbol'  --
  1598.       PC-lint/FlexeLint judges that a temporary needs to be
  1599.       created.  This occurs, typically, when a conversion is
  1600.       required to a user object (i.e. class object).  Where
  1601.       temporaries are created, can be an issue of some concern
  1602.       to programmers seeking a better understanding of how their
  1603.       programs are likely to behave.  But compilers differ in
  1604.       this regard.
  1605. 1902  useless ';' follows '}' in function definition  -- It is
  1606.       possible to follow a function body with a useless
  1607.       semi-colon.  This is not necessarily 'lint' to be removed
  1608.       but may be a preferred style of programming (as
  1609.       semi-colons are placed at the end of other declarations).
  1610. 1904  Old-style C comment  -- For the real bridge-burner one can
  1611.       hunt down and remove all instances of the /* ... */ form
  1612.       of comment.   [12, Item 4]
  1613. 1905  implicit default constructor generated for class 'Name'
  1614.       -- A default constructor was not defined for a class but a
  1615.       base class or a member has a non-trivial default
  1616.       constructor and so a non-trivial default constructor is
  1617.       generated for this class.
  1618. 1907  implicit destructor generated for class 'Name'  -- The
  1619.       named class does not itself have an explicit destructor
  1620.       but either had a base class that has a destructor or has a
  1621.       member class that has a destructor (or both).  In this
  1622.       case a destructor will be generated by the compiler.   [11
  1623.       section 12.4]
  1624. 1908  'virtual' assumed for destructor'~Name()' (inherited from
  1625.       base class 'Name()  -- The destructor cited was inherited
  1626.       from a base class with a virtual destructor.  This word
  1627.       'virtual' was omitted from the declaration.  It is common
  1628.       practice to omit this keyword when implied.  A warning is
  1629.       issued ( 1512) when a base class's destructor is not
  1630.       virtual.  See also  1909.
  1631. 1909  'virtual' assumed, see:  function 'Symbol' (Location)  --
  1632.       The named function overrides a base class virtual function
  1633.       and so is virtual.  It is common practice to omit the
  1634.       virtual keyword in these cases although some feel that
  1635.       this leads to sloppy programming.  This message allows pro
  1636.       grammers to detect and make explicit which functions are
  1637.       actually virtual.
  1638. 1911  Implicit call of constructor 'Symbol' (see text)  -- The
  1639.       Symbol in the message is the name of a constructor called
  1640.       to make an implicit conversion.  This message can be
  1641.       helpful in tracking down hidden sources of inefficiencies.
  1642.       [11 section 12.1]
  1643. 1912  Implicit call of conversion function from class 'Name' to
  1644.       type 'Type'  -- A conversion function (one of the form
  1645.       Symbol::operator Type ()) was implicitly called.  This
  1646.       message can be helpful in tracking down hidden sources of
  1647.       inefficiencies.
  1648. 1914  Default constructor 'Symbol' (Location) not referenced  --
  1649.       A default constructor was not referenced.  When a member
  1650.       function of a class is not referenced, you will normally
  1651.       receive an Informational message ( 1714) to that effect.
  1652.       When the member function is the default constructor,
  1653.       however, we give this Elective Note instead.
  1654.      The rationale for this different treatment lay in the fact
  1655.       that many authors recommend defining a default constructor
  1656.       as a general principle.  Indeed we give an Informational
  1657.       message ( 1712) when a default constructor is not defined
  1658.       for a class.  Therefore, if you are following a modus
  1659.       operandi of not always defining a default constructor you
  1660.       may want to turn off message  1712 and turn on message
  1661.       1914 instead.
  1662. 1916  Ellipsis encountered  -- An ellipsis was encountered while
  1663.       processing the prototype of some function declaration.  An
  1664.       ellipsis is a way of breaking the typing system of C or C++.
  1665. 1917  empty prototype for definition, assumed '(void)'  --
  1666.       Whereas we give an Informational Message ( 1717) when a
  1667.       (non-member) declaration contains no prototype, we give a
  1668.       much milder Elective Note when a definition does the same.
  1669.       For example:
  1670. int f();                // Info 1717
  1671. int f() { return 1; }   // Elective Note 1917
  1672.       The reason for this is that the declaration form has a
  1673.       different meaning in C and C++.  In C it is an incomplete
  1674.       declaration saying nothing about arguments.  In C++ the
  1675.       declaration says there are no arguments.  The definition,
  1676.       however, means the same in both languages.  See also
  1677.       message  1918.   [11 section 8.2.5]
  1678. 1918  empty prototype for member declaration, assumed (void)  --
  1679.       A function declaration within a class contains an empty
  1680.       prototype.  This case is similar to Info  1717, which
  1681.       complains about an empty prototype outside a class.  It
  1682.       receives a lighter classification (Elective Note) because
  1683.       an empty prototype within a class cannot be ambiguous
  1684.       because C does not allow functions within classes.
  1685.       [11 section 8.2.5]
  1686. 1919  Multiple assignment operators for class 'Symbol'  -- For a
  1687.       given class more than one function was declared whose name
  1688.       was 'operator ='.  This is not necessarily a bad thing.
  1689.       For example, a String class may very well have an
  1690.       assignment from char * and such an assignment may be
  1691.       advisable from an efficiency standpoint.  However, it
  1692.       represents a loss of elegance because there will almost
  1693.       certainly be a char * constructor and an assignment
  1694.       operator, which will represent another way of achieving
  1695.       the same effect.
  1696. 1920  Casting to a reference  -- The ARM [11] (Section 5.4)
  1697.       states that reference casts are often 'misguided'.
  1698.       However, too many programs are openly using reference
  1699.       casts to place such casts in the Informational category.
  1700.       [11 section 5.4]
  1701. 1921  Symbol 'Symbol' not checking argument against
  1702.       sizeof(class)  -- This note is given for either operator
  1703.       new or operator delete when defined as member functions.
  1704.       As member functions they are called when new (or delete)
  1705.       is applied to a class type or any derived class type.  The
  1706.       difficulty is with the derived class type.  Any
  1707.       specialized allocator is likely to be useless for a derived
  1708.       class type and hence experts suggest that a test
  1709.       be made of the size_t argument against sizeof(class).
  1710.       Specifically PC-lint/FlexeLint is looking for one of:
  1711.     if( arg == sizeof(class) )
  1712.     if( arg != sizeof(class) )
  1713.     if( sizeof(class) == arg )
  1714.     if( sizeof(class) != arg )
  1715.       or the equivalent.  If any such function is found that is
  1716.       a member of a class that is the base of a derivation, then
  1717.       in addition to Note 1921, we issue Warning  1531.  (see
  1718.       Steve Simpson, "More on Memory Management", Dr. Dobb's
  1719.       Journal, August 1994, p. 10).
  1720. 1922  Symbol 'Symbol' not checking argument for NULL  -- This
  1721.       message is given for a function operator delete which is
  1722.       not checking its parameter for being the NULL pointer.  We
  1723.       would normally expect to see some such check as:
  1724.     if( arg )
  1725.     if( arg == 0 )
  1726.     if( arg != NULL )
  1727.       etc.  Class destructors will normally filter out passing
  1728.       the NULL pointer into the operator delete so that this
  1729.       message is only in the Elective Note category.  If there
  1730.       is no destructor you obtain a warning.  See Warning  1532.
  1731. 1923  macro 'Symbol' could become const variable  -- The
  1732.       designated macro could probably be replaced by a const
  1733.       variable.  A const variable is preferred in some quarters
  1734.       where, for example, a local debugger may not understand
  1735.       macros but would understand variables.  [12, Item 1].
  1736.       The message is issued for macros containing at least one
  1737.       constant or constant equivalent (an earlier const-able
  1738.       macro or const variable) and no other variables or tokens
  1739.       such as ';' of a non-expression nature.
  1740. 1924  C-style cast  -- A C-style cast was detected.  This can be
  1741.       replaced by one of the newer C++ casts having the form:
  1742.       Name<Type>(Expression) where Name is one of static_cast,
  1743.       dynamic_cast, const_cast or reinterpret_cast.  [23, Item 2].
  1744. 1925  Symbol 'Symbol' is a public data member  -- The indicated
  1745.       Symbol is a public data member of a class.  If the class
  1746.       is introduced with the keyword struct the message is not
  1747.       issued.  In some quarters the use of public data members
  1748.       is deprecated.  The rationale is that if function calls
  1749.       replace data references in the public interface, the
  1750.       implementation can change without affecting the interface.
  1751.       [12, Item 20]
  1752. 1926  Symbol 'Symbol's default constructor implicitly called  --
  1753.       A member of a class (identified by Symbol) did not appear
  1754.       in the constructor initialization list.  Since it had a
  1755.       default constructor this constructor was implicitly
  1756.       called.  Is this what the user intended? Some authorities
  1757.       suggest that all members should appear in the constructor
  1758.       initialization list.   [12, Item 12].
  1759. 1927  Symbol 'Symbol' was not initialized in the constructor
  1760.       initializer list  -- A member of a class (identified by
  1761.       Symbol) did not appear in a constructor initialization
  1762.       list.  If the item remains uninitialized through the whole
  1763.       of the constructor, a Warning  1401 is issued.  Some
  1764.       authorities suggest that all members should appear in the
  1765.       constructor initialization list.   [12, Item 12].
  1766. 1928  Symbol 'Name' did not appear in the constructor
  1767.       initializer list  -- A base class (identified by Symbol)
  1768.       did not appear in a constructor initialization list.  If a
  1769.       constructor does not appear, then the default constructor
  1770.       is called.  This may or may not be valid behavior.  If a
  1771.       base class is missing from a copy constructor's
  1772.       initializer list, then a more severe Warning ( 1538) is
  1773.       issued.   [12, Item 12].
  1774. 1929  function 'Symbol' returning a reference  -- A non-member
  1775.       function was found to be returning a reference.  This is
  1776.       not normally considered good practice because
  1777.       responsibility for deleting the object is not easily
  1778.       assigned.   [12, Item 23].
  1779. 1930  Conversion operator 'Symbol' found  -- A conversion
  1780.       operator is a member function of the form:
  1781.     operator Type ();
  1782.       This will be called implicitly by the compiler whenever an
  1783.       object (of the class type) is to be converted to type
  1784.       Type.  Some programmers consider such implicit calls to be
  1785.       potentially harmful leading to programming situations that
  1786.       are difficult to diagnose.  See for example  [23, Item 5].
  1787. 1931  Constructor 'Symbol' can be used for implicit conversions
  1788.       -- A constructor was found that could be used for implicit
  1789.       conversions.  For example:
  1790.     class X
  1791.        {
  1792.      public:
  1793.        X(int);
  1794.        ...
  1795.        };
  1796.       Here, any int (or type convertible to int) could be
  1797.       automatically converted to X.  This can sometimes cause
  1798.       confusing behavior  [23, Item 5].  If this is not what was
  1799.       intended, use the keyword 'explicit' as in:
  1800.     explicit X(int);
  1801.       This will also serve to suppress this message.
  1802. 1932  Base class 'Symbol' is not abstract.  -- An abstract class
  1803.       is a class with at least one pure virtual specifier.  At
  1804.       least one author has argued  [23, Item 33] that all base
  1805.       classes should be abstract although this suggestion flies
  1806.       in the face of existing practice.
  1807. 1933  Call to unqualified virtual function 'Symbol' from
  1808.       non-static member function  -- A classical C++ gotcha is
  1809.       the calling of a virtual function from within a
  1810.       constructor or a destructor.  When we discover a direct  call
  1811. from a constructor or destructor to a virtual
  1812.       function we issue Warning  1506.  But what about indirect
  1813.       calls.  Suppose a constructor calls a function that in
  1814.       turn, perhaps through several levels of call, calls a
  1815.       virtual function.  This could be difficult to detect.  Dan
  1816.       Saks  [24] has suggested a compromise Guideline that
  1817.       "imposes few, if any, practical restrictions".  The
  1818.       Guideline, implemented by this Elective Note, issues a
  1819.       message whenever an unqualified virtual function is called
  1820.       by any other (non-static) member function (for the same
  1821.       'this' object).  For example:
  1822. class X { virtual void f(); void g();  };
  1823. void X::g()
  1824.    {
  1825.    f();        // Note 1933
  1826.    X::f();     // ok -- non virtual call.
  1827.    }
  1828.       Even if total abstinence is unwarranted, turning on
  1829.       message 1933 occasionally can be helpful in detecting
  1830.       situations when constructors or destructors call virtual
  1831.       functions.
  1832. 1934  Shift operator 'Symbol' should be non-member function  --
  1833.       It has been suggested  [12, Item 19] that you should never
  1834.       make a shift operator a member function unless you're
  1835.       defining ostream or istream (the message is suppressed in
  1836.       these two cases).  The reason is that there is a
  1837.       temptation on the part of the novice to, for example,
  1838.       define output to ostream as a class member function left
  1839.       shift that takes ostream as an argument.  This is exactly
  1840.       backwards.  The shift operator normally employs the
  1841.       destination (or source) on the left.
  1842.       On the other hand, if the class you are defining is the
  1843.       source or destination then defining the shift operators is
  1844.       entirely appropriate.
  1845. 1935  Dynamic initialization for class object 'Symbol1'
  1846.       (references 'Symbol2')  -- A static class-like object
  1847.       whose name is Symbol1 is dynamically initialized by
  1848.       referencing Symbol2 (the latter is normally a constructor
  1849.       for the former).  The reason for noting this
  1850.       initialization is that the order of inter-module dynamic
  1851.       initializations is not defined.  (Within a module,
  1852.       however, the intializations are done in the order of
  1853.       appearance.)  Hence, if the constructor is itself
  1854.       dependent on dynamic initialization occurring in another
  1855.       module the behavior is undefined.  For example:
  1856. class X
  1857.    {  X(): ... };
  1858. X x:
  1859.       This will elicit Elective Note 1935 that x is being
  1860.       initialized dynamically by a call to X::X().  Now, if this
  1861.       constructor were to be accessing information that depended
  1862.       on the order of evaluation (such as accessing the value of
  1863.       x itself) the result would be undefined.  We have no
  1864.       evidence of this at this point. and for this reason the
  1865.       message is in the Elective Note category.  However,
  1866.       programmers with a suspected order-of-initialization
  1867.       problem will probably want to turn this on.  See also
  1868.       1936,  1937,  1544 and  1545.
  1869. 1936  Dynamic initialization for variable 'Symbol1' (references
  1870.       'Symbol2')  -- A static scalar whose name is Symbol1 is
  1871.       dynamically initialized and references Symbol2 during the
  1872.       initialization.  For example, let a module consist only
  1873.       of:
  1874. int f();
  1875. int n = f();
  1876.       Here we report that n is dynamically initialized by f().
  1877.       There may be other symbols referenced, Symbol2 is just the
  1878.       first.  The reason for noting this initialization is that
  1879.       the order of inter-module dynamic initializations is not
  1880.       defined.  (Within a module, however, the initializations
  1881.       are done in the order of appearance.)  If Symbol2 were a
  1882.       variable, then PC-lint/FlexeLint could determine that the
  1883.       variable is dynamically initialized in another module and
  1884.       issue a  1544 or  1545 as appropriate.  However, the
  1885.       symbol referenced could be a function (as in the example)
  1886.       and PC-lint/FlexeLint does not analyze the complete
  1887.       function call graph to determine whether there is a
  1888.       dependency on another dynamic initialization.  See also
  1889.       1935 and  1937.
  1890. 1937  Static variable 'Symbol' has a destructor.  -- A static
  1891.       scalar whose name is Symbol has a destructor.  Destructors
  1892.       of static objects are invoked in a predictable order only
  1893.       for objects within the same module (the reverse order of
  1894.       construction).  For objects in different modules this
  1895.       order is indeterminate.  Hence, if the correct operation
  1896.       of a destructor depends on the existence of an object in
  1897.       some other module an indeterminacy could result.  See also
  1898.       1935,  1936,  1544 and  1545.
  1899. 1938  constructor 'Symbol' accesses global data.  -- A
  1900.       constructor is accessing global data.  It is generally not
  1901.       a good idea for constructors to access global data because
  1902.       order of initialization dependencies can be created.  If
  1903.       the global data is itself initialized in another module
  1904.       and if the constructor is accessed during initialization,
  1905.       a 'race' condition is established.   [12, Item 47]
  1906. 1939  Down cast detected  -- A down cast is a cast from a
  1907.       pointer (or reference) to a base class to a pointer (or
  1908.       reference) to a derived class.  A cast down the class
  1909.       hierarchy is fraught with danger.  Are you sure that the
  1910.       alleged base class pointer really points to an object in
  1911.       the derived class.  Some amount of down casting is
  1912.       necessary but a wise programmer will reduce this to a
  1913.       minimum.   [12, Item 39]
  1914. 1961  virtual member function 'Symbol' could be made const  --
  1915.       This message is similar to message  1762 (member function
  1916.       could be made const) except that it is issued for a
  1917.       virtual function.  You may not want to make virtual
  1918.       functions const because then any overriding function would
  1919.       have to be const as well.  Consider, for example:
  1920. class A { virtual void f() {} /* ... */ };
  1921. class B : public A
  1922.    { int a; void f() { a = 0; } };
  1923.       Here, class B overrides A's function f() and, in doing so,
  1924.       modifies member a.  If A::f() had been declared const,
  1925.       this would not have been possible.
  1926.       Nonetheless, a particularly rigorous user may want to hunt
  1927.       down such virtual functions and make them all const and so
  1928.       this Note is provided.
  1929.       This message is also similar to Note  1962, which is
  1930.       issued for functions that make deep modifications.  Note
  1931.       1962 takes priority over 1961.  That is, a virtual
  1932.       function that makes a deep modification (but no shallow
  1933.       modifications) will have Note  1962 issued but not Note 1961.
  1934. 1962  Non-const member function 'Symbol' contains a deep
  1935.       modification.  -- The designated member function could be
  1936.       declared const but shouldn't be because it contains a deep
  1937.       modification.  For example:
  1938. class X
  1939.    {
  1940.    char *p;
  1941.    public:
  1942.    void f() { *p = 0; }
  1943.    x();
  1944.    };
  1945.       will elicit this message indicating that X::f() contains a 
  1946.       deep modification. A modification is considered shallow if
  1947.       it modifies (or exposes for modification) a class member
  1948.       directly.  A modification is considered deep if it
  1949.       modifies information indirectly through a class member
  1950.       pointer.  This Elective Note is available for completeness
  1951.       so that a programmer can find all functions that could
  1952.       result in a class being modified.  It does not indicate
  1953.       that the programming is deficient.  In particular, if the
  1954.       function is marked const an Info  1763 will be issued.
  1955.       See also  1762,  1763.