/* A collection of all the different known operator prototypes in C++ */

// arithmetic operators
Type1 operator + (const Type1& a);                         // +a
Type1 operator + (const Type1& a, const Type2& b);         // a + b
Type1& operator ++ (Type1& a);                             // ++a
Type1 operator ++ (Type1& a, int);                         // a++
Type1& operator += (Type1& a, const Type1& b);             // a += b
Type1 operator - (const Type1& a);                         // -a
Type1& operator -- (Type1& a);                             // --a
Type1 operator -- (Type1& a, int);                         // a--
Type1& operator -= (Type1& a, const Type1& b);             // a -= b
Type1 operator * (const Type1& a, const Type1& b);         // a * b
Type1& operator *= (Type1& a, const Type1& b);             // a *= b
Type1 operator / (const Type1& a, const Type1& b);         // a / b
Type1& operator /= (Type1& a, const Type1& b);             // a /= b
Type1 operator % (const Type1& a, const Type1& b);         // a % b
Type1& operator %= (Type1& a, const Type1& b);             // a %= b

// comparison operators
bool operator < (const Type1& a, const Type1& b);          // a < b
bool operator <= (const Type1& a, const Type1& b);         // a <= b
bool operator > (const Type1& a, const Type1& b);          // a > b
bool operator >= (const Type1& a, const Type1& b);         // a >= b
bool operator != (const Type1& a, const Type1& b);         // a != b
bool operator == (const Type1& a, const Type1& b);         // a == b

// logical operators
bool operator ! (const Type1& a);                          // !a
bool operator && (const Type1& a, const Type1& b);         // a && b
bool operator || (const Type1& a, const Type1& b);         // a || b

// bitwise operators
Type1 operator << (const Type1& a, const Type1& b);        // a << b
Type1& operator <<= (Type1& a, const Type1& b);            // a <<= b
Type1 operator >> (const Type1& a, const Type1& b);        // a >> b
Type1& operator >>= (Type1& a, const Type1& b);            // a >>= b
Type1 operator ~ (const Type1& a);                         // ~a
Type1 operator & (const Type1& a, const Type1& b);         // a & b
Type1& operator &= (Type1& a, const Type1& b);             // a &= b
Type1 operator | (const Type1& a, const Type1& b);         // a | b
Type1& operator |= (Type1& a, const Type1& b);             // a |= b
Type1 operator ^ (const Type1& a, const Type1& b);         // a ^ b
Type1& operator ^= (Type1& a, const Type1& b);             // a ^= b

// other operators
Type1& Type1::operator = (const Type1& b);                 // a = b
void operator () (Type1& a);                               // a()
const Type2& operator [] (const Type1& a, const Type1& b); // a[b]
Type2& operator * (const Type1& a);                        // *a
Type2* operator & (const Type1& a);                        // &a
Type2* Type1::operator -> ();                              // a->b
Type1::operator type ();                                   // (type)a
Type2& operator , (const Type1& a, Type2& b);              // a, b
void *Type1::operator new (size_t x);                      // new Type1
void *Type1::operator new[] (size_t x);                    // new Type1[n]
void *Type1::operator delete (size_t x);                   // delete a
void *Type1::operator delete[] (size_t x);                 // delete [] a

// Misc examples
int& operator * ();
Foo::operator const char * ();
Foo::operator const Bar& ();

