This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/21499] New: declaration/initialization of non-integral member constants: compiler does not emit error


The following code doesn't emit an error:

	class Curious {
	public:
	    static const float c5 = 7.0;
	};

The above code is illegal according to the following references. The compiler
does not emit an error (instead the error is caught at link-time if the member
constant is not defined).

According to paragraph 9.4.2.4 of the standard:
If a static data member is of const integral or const enumeration type, its
declaration in the class definition can specify a constant initializer which
shall be an integral constant expression (5.9). [...] The member shall still be
defined in a namespace scope if it used in the program and the namespace scope
definition shall not contain an initializer.

See also paragraph 10.4.6.2 of Stroustrup's "The C++ Programming Language":
It is also possible to initialize a static integral constant member by adding a
constant-expression initializer to its member declaration. For example:
	class Curious {
	public:
	    [...]
	    static const float c5 = 7.0;    // error: in-class not integral
	    [...]

It's a good idea to flag this error to avoid errors that are more difficult to
catch at link-time. Apparently GCC does not require integral member constants to
be defined, but it does require other member constants to be defined somewhere.
Why not help enforce this at compile-time?

-- 
           Summary: declaration/initialization of non-integral member
                    constants: compiler does not emit error
           Product: gcc
           Version: 4.0.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: papadopo at shfj dot cea dot fr
                CC: gcc-bugs at gcc dot gnu dot org
  GCC host triplet: sparc-sun-solaris2.8


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21499


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]