08a22e2
08a22e2
ld.lld: error: undefined symbol: unsigned long cc::PaintOpWriter::SerializedSize<unsigned long>()
08a22e2
08a22e2
diff -up chromium-122.0.6261.69/cc/paint/paint_op_writer.h.me chromium-122.0.6261.69/cc/paint/paint_op_writer.h
08a22e2
--- chromium-122.0.6261.69/cc/paint/paint_op_writer.h.me	2024-02-25 12:04:07.008177603 +0100
08a22e2
+++ chromium-122.0.6261.69/cc/paint/paint_op_writer.h	2024-02-25 12:14:45.972117522 +0100
08a22e2
@@ -112,7 +112,17 @@ class CC_PAINT_EXPORT PaintOpWriter {
d895b61
 
d895b61
  private:
d895b61
   template <typename T>
d895b61
-  static constexpr size_t SerializedSizeSimple();
d895b61
+  static constexpr size_t SerializedSizeSimple() {
d895b61
+    static_assert(!std::is_pointer_v<T>);
d895b61
+    return base::bits::AlignUp(sizeof(T), kDefaultAlignment);
d895b61
+  }
08a22e2
+
08a22e2
+  // size_t is always serialized as two uint32_ts to make the serialized result
d895b61
+  // portable between 32bit and 64bit processes.
d895b61
+  template <>
08a22e2
+    constexpr size_t SerializedSizeSimple<size_t>() {
08a22e2
+    return base::bits::AlignUp(2 * sizeof(uint32_t), kDefaultAlignment);
d895b61
+  }
d895b61
 
d895b61
  public:
d895b61
   // SerializedSize() returns the maximum serialized size of the given type or
08a22e2
@@ -123,7 +133,10 @@ class CC_PAINT_EXPORT PaintOpWriter {
d895b61
   // deserialization, and make it possible to allow dynamic sizing for some
d895b61
   // data types (see the specialized/overloaded functions).
d895b61
   template <typename T>
d895b61
-  static constexpr size_t SerializedSize();
d895b61
+  static constexpr size_t SerializedSize() {
d895b61
+    static_assert(std::is_arithmetic_v<T> || std::is_enum_v<T>);
d895b61
+    return SerializedSizeSimple<T>();
d895b61
+  }
d895b61
   template <typename T>
d895b61
   static constexpr size_t SerializedSize(const T& data);
d895b61
   static size_t SerializedSize(const PaintImage& image);
08a22e2
@@ -439,24 +452,6 @@ class CC_PAINT_EXPORT PaintOpWriter {
d895b61
 };
d895b61
 
08a22e2
 template <typename T>
d895b61
-constexpr size_t PaintOpWriter::SerializedSizeSimple() {
d895b61
-  static_assert(!std::is_pointer_v<T>);
d895b61
-  return base::bits::AlignUp(sizeof(T), kDefaultAlignment);
d895b61
-}
d895b61
-
d895b61
-// size_t is always serialized as two uint32_ts to make the serialized result
d895b61
-// portable between 32bit and 64bit processes.
d895b61
-template <>
d895b61
-constexpr size_t PaintOpWriter::SerializedSizeSimple<size_t>() {
d895b61
-  return base::bits::AlignUp(2 * sizeof(uint32_t), kDefaultAlignment);
d895b61
-}
d895b61
-
08a22e2
-template <typename T>
d895b61
-constexpr size_t PaintOpWriter::SerializedSize() {
d895b61
-  static_assert(std::is_arithmetic_v<T> || std::is_enum_v<T>);
d895b61
-  return SerializedSizeSimple<T>();
d895b61
-}
d895b61
-template <typename T>
d895b61
 constexpr size_t PaintOpWriter::SerializedSize(const T& data) {
d895b61
   return SerializedSizeSimple<T>();
d895b61
 }