[gnu.g++.bug] Initialization bug?

jps@cs.brown.edu (John Shewchuk) (08/01/89)

It appears that there is a bug in g++ that deals with static members and
initialization.  The following file will not compile in g++ 1.35.1. 

Regards,
John Shewchuk

// -*- C++ -*-
///////////////////////////////////////////////////////////////////////////
// 
// Example that demonstrates an initialization problem with 
//   g++ version 1.35.1-    (g++ -v).
//
// The line `static X instance_x;' generates:
//
//   t.c:20: warning: member `instance_x' cannot be static 
//           (type `X' needs constructing)
// 
// as well as several errors.
//
// According to Dan Weinreb <404@odi.ODI.COM> this works under cfront 2.0.
// Furthermore, he write:
//   According to the Product Reference Manual, page 60, sec 9.4:
//
//  "Static members obey the usual class member access rules, except that
//   they can be initialized (in file scope)."
//
// Also see the C++ Primer.
///////////////////////////////////////////////////////////////////////////

class X {
private:
  int x_value;
public:
  X(int x)  { x_value = x; }              // The only constructor- note arg.
};

class Y {
private:
  static X instance_x;                    // Must be initialized.
  int y_value;
public:
  Y(int y)  { y_value = y; }
};


X Y::instance_x(1);  // Initialization does not violate access rules.

main()
{
  Y(2);
}


John Shewchuk                                                jps@cs.brown.edu