@@ -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 ;
0 commit comments