In CeePlusPlus, the way one has a function return a LeftValue is by ReturningReferences. This is necessary to implement OperatorOverloading properly; OTOH this feature has some issues with it which make it ConsideredHarmful by some. template class myArray { // buncha stuff not important for this example // need to support [] T &operator [] (int index); // and for const arrays const T &operator [] (int index) const; // more }; In the first case, since "operator []" is declared to return a ''reference'' to T, the result can be used as a LeftValue, i.e. intArray a; a[0] = 1; a[1] = 2; cout << a[0] << "\n"; cout << a[1] << "\n"; As expected, this program fragment prints 1 2 on the standard output. ReturningReferences has quite a few issues with it, which put it firmly in the category of "use only if you know what you are doing". * It is a common newbie error to return references to automatic variables. int &bad (void) { int a = 0; return a; } // some other function cout << bad(); Were we to abandon the reference type and use pointers, the equivalent C code would be int *bad(void) { int a = 0; return &a; } /* some other function */ printf ("%d\n", *(bad())); In both cases, a pointer to the returning function's stack frame is returned--in other words, a WildPointer.