I found by pure accident that g++ allows the RHS of an initialization to be the
very variable that is being initialized.  Two minimalist examples are given
below.  The same behavior is present under gcc 2.95.2, 3.3.3, and 3.4.1.

I'm suprised that the new variable is even considered to be defined in the
context of the RHS of its own initializer, although I suppose it is concievable
in this mad mad world that it might be valid syntax under the standard.  But
surely the compiler should at least issue the "warning: ... might be used
uninitialized" message when compiled with -O -W -Wall, since the variable is
definitely not initialized yet!

Example 1:
int main()
{
  int i;          // the compiler will only warn about i being uninitialized
  int j= i;
  int k= k;       // the compiler has no problem with this
  return i+j+k;   // no warning about k being possibly uninitialized
}


Example 2:
class A {
  int x;
};

int main() {
  A* aptr= (A*)aptr;   // why is this line valid?
  return (aptr==0);    // aptr isn't _really_ initialized, but no warning...
}

-- 
           Summary: g++ allows variable to be initialized by value of
                    variable being initialized
           Product: gcc
           Version: 3.4.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: gahs at phys dot ksu dot edu
                CC: gcc-bugs at gcc dot gnu dot org


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

Reply via email to