Here's some quick code you'll need to experiment with this:
class TemplateType<Class T> { T value; static typename GetType() { return (new TemplateType<T>()).Type().GetVariableType(0); } }
Running both of these lines will result in the same print...
Print(TemplateType<ref Managed>.GetType());
Print(TemplateType<Managed>.GetType());
SCRIPT : Managed SCRIPT : ScriptDebugger: remote script executed successfully. SCRIPT : Managed SCRIPT : ScriptDebugger: remote script executed successfully.
If they were referenced, they would be @Managed.
Also... their memory references just get deleted.