Well, an alternative way to get around copying is to use the idiom "return parameter" instead of using the return value of the function
void getAllAbove(Triangle* t, std::list<Triangle*>& result);
Instead of forming the result “on the stack”, as it is now, form it directly in the parameter result(that is, in the list of recipients that you pass from the caller).
As for your source code, whether copying will occur or not depends on the capabilities of your compiler.
. ( , , , .) -, , , . . ( , ++ 98).
, ( ++ 03). , , "return parameter". , GCC . , .