fix order of Serialize for linux build (#17119)
authorDavid Mason <davmason@microsoft.com>
Thu, 22 Mar 2018 18:44:37 +0000 (11:44 -0700)
committerGitHub <noreply@github.com>
Thu, 22 Mar 2018 18:44:37 +0000 (11:44 -0700)
Fix for #17116. The build would work fine for dynamic events on Windows, but on Linux clang always takes the overloads with <Head, Tail...> until there are no arguments, then complains about no overload takes 0 arguments.

src/gc/gcevent_serializers.h

index 643ab82..ac6e991 100644 (file)
@@ -106,33 +106,33 @@ struct EventSerializationTraits<uint32_t>
  * Given a list of arguments , returns the total size of
  * the buffer required to fully serialize the list of arguments.
  */
-template<class Head, class... Tail>
-size_t SerializedSize(Head head, Tail... tail)
-{
-    return EventSerializationTraits<Head>::SerializedSize(head) + SerializedSize(tail...);
-}
-
 template<class Head>
 size_t SerializedSize(Head head)
 {
     return EventSerializationTraits<Head>::SerializedSize(head);
 }
 
+template<class Head, class... Tail>
+size_t SerializedSize(Head head, Tail... tail)
+{
+    return EventSerializationTraits<Head>::SerializedSize(head) + SerializedSize(tail...);
+}
+
 /*
  * Given a list of arguments and a list of actual parameters, serialize
  * the arguments into the buffer that's given to us.
  */
-template<class Head, class... Tail>
-void Serialize(uint8_t** buf, Head head, Tail... tail)
+template<class Head>
+void Serialize(uint8_t** buf, Head head)
 {
     EventSerializationTraits<Head>::Serialize(head, buf);
-    Serialize(buf, tail...);
 }
 
-template<class Head>
-void Serialize(uint8_t** buf, Head head)
+template<class Head, class... Tail>
+void Serialize(uint8_t** buf, Head head, Tail... tail)
 {
     EventSerializationTraits<Head>::Serialize(head, buf);
+    Serialize(buf, tail...);
 }
 
 } // namespace gc_event