diff options
| -rw-r--r-- | yt/yt/core/ytree/unittests/yson_struct_ut.cpp | 21 | ||||
| -rw-r--r-- | yt/yt/core/ytree/yson_struct-inl.h | 2 | ||||
| -rw-r--r-- | yt/yt/core/ytree/yson_struct_public.h | 4 |
3 files changed, 24 insertions, 3 deletions
diff --git a/yt/yt/core/ytree/unittests/yson_struct_ut.cpp b/yt/yt/core/ytree/unittests/yson_struct_ut.cpp index 0337b098be0..9636396ac59 100644 --- a/yt/yt/core/ytree/unittests/yson_struct_ut.cpp +++ b/yt/yt/core/ytree/unittests/yson_struct_ut.cpp @@ -1758,6 +1758,27 @@ TEST(TYsonStructTest, TestOptionalNoInit) //////////////////////////////////////////////////////////////////////////////// +struct TTestNonLiteralStruct +{ + TTestNonLiteralStruct() + { } +}; + +class TTestNonLiteralStructSerializer + : public virtual TExternalizedYsonStruct +{ + REGISTER_EXTERNALIZED_YSON_STRUCT(TTestNonLiteralStruct, TTestNonLiteralStructSerializer); + + static void Register(TRegistrar) + { } +}; + +ASSIGN_EXTERNAL_YSON_SERIALIZER(TTestNonLiteralStruct, TTestNonLiteralStructSerializer); + +static_assert(CExternallySerializable<TTestNonLiteralStruct>); + +//////////////////////////////////////////////////////////////////////////////// + struct TTestTraitConfig { int Field1; diff --git a/yt/yt/core/ytree/yson_struct-inl.h b/yt/yt/core/ytree/yson_struct-inl.h index baa01de7b5b..cb1cb905629 100644 --- a/yt/yt/core/ytree/yson_struct-inl.h +++ b/yt/yt/core/ytree/yson_struct-inl.h @@ -552,7 +552,7 @@ public: \ YSON_STRUCT_EXTERNAL_SERIALIZER_IMPL__DECLARE_ALIASES(TStruct, TSerializer) \ #define ASSIGN_EXTERNAL_YSON_SERIALIZER(TStruct, TSerializer) \ - [[maybe_unused]] constexpr auto GetExternalizedYsonStructTraits(TStruct) \ + [[maybe_unused]] constexpr auto GetExternalizedYsonStructTraits(TStruct*) \ { \ struct [[maybe_unused]] TTraits \ { \ diff --git a/yt/yt/core/ytree/yson_struct_public.h b/yt/yt/core/ytree/yson_struct_public.h index 495a47b46fa..40d3db73196 100644 --- a/yt/yt/core/ytree/yson_struct_public.h +++ b/yt/yt/core/ytree/yson_struct_public.h @@ -24,12 +24,12 @@ concept CExternalizedYsonStructTraits = requires { }; template <class T> -concept CExternallySerializable = requires (T t) { +concept CExternallySerializable = requires (T* t) { { GetExternalizedYsonStructTraits(t) } -> CExternalizedYsonStructTraits; }; template <CExternallySerializable T> -using TGetExternalizedYsonStructTraits = decltype(GetExternalizedYsonStructTraits(std::declval<T>())); +using TGetExternalizedYsonStructTraits = decltype(GetExternalizedYsonStructTraits(std::declval<T*>())); //////////////////////////////////////////////////////////////////////////////// |
