Skip to content

Commit 48cc904

Browse files
committed
fix serialization constraints (for clang 22)
1 parent 0480c59 commit 48cc904

3 files changed

Lines changed: 5 additions & 20 deletions

File tree

sources/include/cage-core/containerSerialization.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ namespace cage
8484
c.empty();
8585
typename C::value_type;
8686
c.insert(c.end(), *c.begin());
87-
} && SerializableConcept<typename C::value_type>;
87+
};
8888

8989
template<class C>
9090
concept MemcpyContainerConcept = WritableContainerConcept<C> && requires(C c) { c.data(); } && MemcpyableConcept<typename C::value_type>;
@@ -177,7 +177,6 @@ namespace cage
177177
// overload for pointer range
178178

179179
template<class T>
180-
requires requires(Serializer s, T v) { s << v; } // requires <<, but not >>
181180
Serializer &operator<<(Serializer &s, PointerRange<T> c)
182181
{
183182
s << numeric_cast<uint64>(c.size());

sources/include/cage-core/serialization.h

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -144,18 +144,10 @@ namespace cage
144144
return s;
145145
}
146146

147-
namespace privat
148-
{
149-
template<class T>
150-
concept SerializableConcept = requires(Serializer s, Deserializer d, T v) {
151-
d >> v;
152-
s << v;
153-
};
154-
}
155-
156147
// r-value deserializer
157148

158-
Deserializer &&operator>>(Deserializer &&s, privat::SerializableConcept auto &v)
149+
template<class T>
150+
Deserializer &&operator>>(Deserializer &&s, T &v)
159151
{
160152
s >> v;
161153
return std::move(s);
@@ -164,7 +156,7 @@ namespace cage
164156
// overloads for c array
165157

166158
template<class T, uintPtr N>
167-
requires(privat::SerializableConcept<T>)
159+
requires(privat::WritableConcept<T>)
168160
Serializer &operator<<(Serializer &s, const T (&v)[N])
169161
{
170162
for (auto &it : v)
@@ -173,7 +165,7 @@ namespace cage
173165
}
174166

175167
template<class T, uintPtr N>
176-
requires(privat::SerializableConcept<T>)
168+
requires(privat::WritableConcept<T>)
177169
Deserializer &operator>>(Deserializer &s, T (&v)[N])
178170
{
179171
for (auto &it : v)
@@ -203,15 +195,13 @@ namespace cage
203195
// overloads for std::pair
204196

205197
template<class A, class B>
206-
requires(privat::SerializableConcept<A> && privat::SerializableConcept<B>)
207198
Serializer &operator<<(Serializer &s, const std::pair<A, B> &p)
208199
{
209200
s << p.first << p.second;
210201
return s;
211202
}
212203

213204
template<class A, class B>
214-
requires(privat::SerializableConcept<std::remove_const_t<A>> && privat::SerializableConcept<B>)
215205
Deserializer &operator>>(Deserializer &s, std::pair<A, B> &p)
216206
{
217207
s >> const_cast<std::remove_const_t<A> &>(p.first) >> p.second;

sources/test-core/serialization.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,6 @@ void testSerialization()
2929
static_assert(!privat::WritableConcept<PointerRange<uint32>>);
3030
static_assert(!privat::WritableConcept<PointerRange<const uint32>>);
3131
static_assert(!privat::WritableConcept<PointerRange<String>>);
32-
static_assert(privat::SerializableConcept<uint32>);
33-
static_assert(privat::SerializableConcept<String>);
34-
static_assert(privat::SerializableConcept<std::pair<String, uint32>>);
35-
static_assert(privat::SerializableConcept<std::pair<const String, uint32>>); // used in std::map
3632
}
3733

3834
{

0 commit comments

Comments
 (0)