[comp.lang.c++] Proposed extension ++@ , @++

wrl@apple.com (Wayne Loofbourrow) (10/12/89)

The following is a proposed extension to operator overloading of 
operator++ and operator-- :

In current C++, it is possible to overload operator ++.  However, it is 
not possible to make a distinction between prefix and postfix usage.
This leads to an inability to create user-defined types that
behave just like built in types.

How about allowing declarations of the form:

class complex
{
    // ...
public:
    // ...
    complex operator ++@ ();  // prefix ++ operator
    complex operator @++ ();  // postfix ++ operator
};

complex complex::operator ++@()
{
    *this = *this + 1;
    return *this;
}

complex complex::operator @++()
{
    complex c = *this;
    *this = *this + 1;
    return c;
}

For compatibility with current C++, defining the operator++ function would 
be equivalent to defining both operator ++@ and operator @++ identically.
This should allow all current C++ code to work just fine and also
allow further discrimination when it is desired.

The same extension would apply to operator-- .

What do people think?

Wayne Loofbourrow
Advanced Technology Group
Apple Computer, Inc.
Internet: wrl@apple.com

jima@hplsla.HP.COM (Jim Adcock) (10/13/89)

// not to imply that the following is the "right" solution to pre vs post ++,
// --and it doesn't work anyway, BUT, can someone explain to me why 2.0 accepts
// postfix in the following, but not prefix???  ...And why g++ 1.35.x won't
// accept either form???

extern "C" {int printf(char* p, ...);};

class cmpx
{
  double re,im;
  // ...
public:
  // ...
  cmpx(double r=0,double i=0):re(r),im(i){}
  cmpx& operator=(const cmpx& x){re=x.re; im=x.im; return *this;}
  operator double&(){return re;}
};

main()
{
  cmpx c,d;
  d=c;
  printf("%g\n",(double&)(d));
//d=++c; 				sorry, 2.0 won't accept this
  printf("%g\n",(double&)(d));
  d=c++;
  printf("%g\n",(double&)(d));
  d=c++;
  printf("%g\n",(double&)(d));
  d=c;
  printf("%g\n",(double&)(d));
}