Mit
wird eine lokale Variable auf dem Stack angelegt; deren Lebensdauer
endet mit dem Ende des umgebenden Blocks. Sie kann also nicht
zurückgegeben werden - und wird es auch nicht.
Es kommt ja noch:
Weil deine Methode als Rückgabetyp TetrixPiece hat, wird vom
Compiler klammheimlich eine Kopie von result angelegt, die wird
zurückgegeben und beim Aufrufer irgendwann entsorgt (tatsächlich wird
beim Aufruf bereits dafür Platz auf dem Stack als versteckter
nullter Parameter geschaffen und mit den restlichen Parametern nach
dem Rücksprung entsorgt). Alles in Ordnung.
Hättest du als Rückgabetyp nicht TetrixPiece, sondern TetrixPiece&
(also eine Referenz), dann gäbe es Probleme, weil der Aufrufer
ein Objekt in der Hand hat, dessen Lebensdauer beendet ist und
der Stackbereich dafür bereits für etwas anderes verwendet
wird (möglicherweise).