Magic Nodes

UPARAM(ref) is hackery by Epic Games.
We use this when you want to input a property by reference, and maybe call methods that might modify the state of the property.

const Type& someType does the same (an input), but depending on what you do in c++, the compiler is going the scream because the param is marked as a ‘constant’.

If there’s no UPARAM(ref) then the value is an output pin when declared as non constant reference.

Non constant references will always be treated as output pins.
Types passed by value are always inputs.