using type_info as typeid().name() behavior is unspecified