summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--yt/yt/core/ytree/unittests/yson_struct_ut.cpp21
-rw-r--r--yt/yt/core/ytree/yson_struct-inl.h2
-rw-r--r--yt/yt/core/ytree/yson_struct_public.h4
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*>()));
////////////////////////////////////////////////////////////////////////////////