Agent ToString not working

Can anyone explain why I need to do this weirdness:

# weirdness
GetAgentName<public><localizes>(Agent:agent):message = "{Agent}"
GetAgentNameString<public>(Agent:agent):string = Localize(GetAgentName(Agent))

Ideally I’d just like to call Print(Agent) but it doesn’t work and throws an error. Same goes for Print("{Agent}") which also throws an error.
Right now, I’m defining the above two functions and then calling Print(GetAgentNameAsString(Agent)) which works.