main does not use trailing return type for simplicity