https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80681
            Bug ID: 80681
           Summary: missing -Wuninitialized for const or reference member
                    of a private base class
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: msebor at gcc dot gnu.org
  Target Milestone: ---

G++ issues -Wuninitialized for uninitialized private const data or reference
members of classes with no constructors because there is no other way to
initialize them.

However, G++ neglects to issue the same warning when an uninitialized public
const data or reference member is defined in a base class that is privately
derived by a class without constructors, even though such a member also cannot
be initialized.

In addition, the C++ warning is not entirely correctly documented.  The manual
states that:

  In C++, warn if a non-static reference or non-static const member appears in
a class without constructors. 

However, G++ only issues the warning when the member is inaccessible (private
or protected).


$ cat y.C && gcc -S -Wall -Wextra y.C
struct A1 { private: const int i; };    // warning, good

struct B1 { const int j; };             // no warning, good

struct C1: private B1 { };              // bug: missing warning


struct A2 { private: const int &i; };   // warning, good

struct B2 { const int &j; };            // no warning, good

struct C2: private B2 { };              // bug: missing warning

y.C:1:32: warning: non-static const member ‘const int A1::i’ in class without a
constructor [-Wuninitialized]
 struct A1 { private: const int i; };    // warning, good
                                ^
y.C:8:33: warning: non-static reference ‘const int& A2::i’ in class without a
constructor [-Wuninitialized]
 struct A2 { private: const int &i; };   // warning, good
                                 ^

Reply via email to