aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbabenko <babenko@yandex-team.com>2024-08-12 14:25:18 +0300
committerbabenko <babenko@yandex-team.com>2024-08-12 14:37:41 +0300
commite3206dbabc87736656ea7f93a10733b19df972ef (patch)
tree7cb8746d5ae689cd1ca3bef56f9c238ab8a233dd
parent975db672d3fdc6000736c4e9860fc1510417374a (diff)
downloadydb-e3206dbabc87736656ea7f93a10733b19df972ef.tar.gz
Do not require non-polymorphic types to be registered
4c5a97623154a55b7e85fc124ee047b31f738077
-rw-r--r--yt/yt/core/phoenix/type_def-inl.h18
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);
}