diff options
author | babenko <babenko@yandex-team.com> | 2024-08-12 14:25:18 +0300 |
---|---|---|
committer | babenko <babenko@yandex-team.com> | 2024-08-12 14:37:41 +0300 |
commit | e3206dbabc87736656ea7f93a10733b19df972ef (patch) | |
tree | 7cb8746d5ae689cd1ca3bef56f9c238ab8a233dd | |
parent | 975db672d3fdc6000736c4e9860fc1510417374a (diff) | |
download | ydb-e3206dbabc87736656ea7f93a10733b19df972ef.tar.gz |
Do not require non-polymorphic types to be registered
4c5a97623154a55b7e85fc124ee047b31f738077
-rw-r--r-- | yt/yt/core/phoenix/type_def-inl.h | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/yt/yt/core/phoenix/type_def-inl.h b/yt/yt/core/phoenix/type_def-inl.h index 914cf669ae..a57d812b83 100644 --- a/yt/yt/core/phoenix/type_def-inl.h +++ b/yt/yt/core/phoenix/type_def-inl.h @@ -885,15 +885,15 @@ struct TSerializer YT_VERIFY(streamTag == runtimeTag); } } else { - const auto& descriptor = [&] () -> const TTypeDescriptor& { - if constexpr(TPolymorphicTraits<T>::Polymorphic) { - auto tag = LoadSuspended<TTypeTag>(context); - return ITypeRegistry::Get()->GetUniverseDescriptor().GetTypeDescriptorByTagOrThrow(tag); - } else { - return T::GetTypeDescriptor(); - } - }(); - rawPtr = descriptor.template ConstructOrThrow<T>(); + if constexpr(TPolymorphicTraits<T>::Polymorphic) { + auto tag = LoadSuspended<TTypeTag>(context); + const auto& descriptor = ITypeRegistry::Get()->GetUniverseDescriptor().GetTypeDescriptorByTagOrThrow(tag); + rawPtr = descriptor.template ConstructOrThrow<T>(); + } else { + using TFactory = typename TFactoryTraits<T>::TFactory; + static_assert(TFactory::ConcreteConstructor); + rawPtr = static_cast<T*>(TFactory::ConcreteConstructor()); + } context.RegisterConstructedObject(rawPtr); } |