diff --git a/src/dawn/common/BitSetRangeIterator.h b/src/dawn/common/BitSetRangeIterator.h
index d44ad3c..4a83a7d 100644
--- a/src/dawn/common/BitSetRangeIterator.h
+++ b/src/dawn/common/BitSetRangeIterator.h
@@ -54,8 +54,7 @@
         explicit Iterator(const std::bitset<N>& bits, uint32_t offset = 0, uint32_t size = 0);
         Iterator& operator++();
 
-        bool operator==(const Iterator& other) const;
-        bool operator!=(const Iterator& other) const;
+        bool operator==(const Iterator& other) const = default;
 
         // Returns a pair of offset and size of the current range
         std::pair<T, size_t> operator*() const {
@@ -111,16 +110,6 @@
 }
 
 template <size_t N, typename T>
-bool BitSetRangeIterator<N, T>::Iterator::operator==(const Iterator& other) const {
-    return mOffset == other.mOffset && mSize == other.mSize && mBits == other.mBits;
-}
-
-template <size_t N, typename T>
-bool BitSetRangeIterator<N, T>::Iterator::operator!=(const Iterator& other) const {
-    return !(*this == other);
-}
-
-template <size_t N, typename T>
 size_t BitSetRangeIterator<N, T>::Iterator::ScanForwardAndShiftBits() {
     if (mBits.none()) {
         return N;  // Or some other indicator that there are no bits.
diff --git a/src/dawn/common/Range.h b/src/dawn/common/Range.h
index 8ab2cf4..f4fd777 100644
--- a/src/dawn/common/Range.h
+++ b/src/dawn/common/Range.h
@@ -51,8 +51,7 @@
     class Iterator final {
       public:
         explicit Iterator(Integer value) : mValue(value) {}
-        bool operator==(const Iterator& other) const { return other.mValue == mValue; }
-        bool operator!=(const Iterator& other) const { return !(*this == other); }
+        bool operator==(const Iterator& other) const = default;
         Iterator& operator++() {
             mValue++;
             return *this;
diff --git a/src/dawn/common/RefBase.h b/src/dawn/common/RefBase.h
index 7f45644..e341006 100644
--- a/src/dawn/common/RefBase.h
+++ b/src/dawn/common/RefBase.h
@@ -124,8 +124,7 @@
     bool operator==(const T& other) const { return mValue == other; }
     bool operator!=(const T& other) const { return mValue != other; }
 
-    bool operator==(const RefBase<T, Traits>& other) const { return mValue == other.mValue; }
-    bool operator!=(const RefBase<T, Traits>& other) const { return mValue != other.mValue; }
+    bool operator==(const RefBase<T, Traits>& other) const = default;
 
     const T operator->() const { return mValue; }
     T operator->() { return mValue; }
diff --git a/src/dawn/common/SerialStorage.h b/src/dawn/common/SerialStorage.h
index c6d75cf..244d6bc 100644
--- a/src/dawn/common/SerialStorage.h
+++ b/src/dawn/common/SerialStorage.h
@@ -54,8 +54,7 @@
         explicit Iterator(StorageIterator start);
         Iterator& operator++();
 
-        bool operator==(const Iterator& other) const;
-        bool operator!=(const Iterator& other) const;
+        bool operator==(const Iterator& other) const = default;
         Value& operator*() const;
 
       private:
@@ -71,8 +70,7 @@
         explicit ConstIterator(ConstStorageIterator start);
         ConstIterator& operator++();
 
-        bool operator==(const ConstIterator& other) const;
-        bool operator!=(const ConstIterator& other) const;
+        bool operator==(const ConstIterator& other) const = default;
         const Value& operator*() const;
 
       private:
@@ -246,18 +244,6 @@
 }
 
 template <typename Derived>
-bool SerialStorage<Derived>::Iterator::operator==(
-    const typename SerialStorage<Derived>::Iterator& other) const {
-    return other.mStorageIterator == mStorageIterator && other.mSerialIterator == mSerialIterator;
-}
-
-template <typename Derived>
-bool SerialStorage<Derived>::Iterator::operator!=(
-    const typename SerialStorage<Derived>::Iterator& other) const {
-    return !(*this == other);
-}
-
-template <typename Derived>
 typename SerialStorage<Derived>::Value& SerialStorage<Derived>::Iterator::operator*() const {
     if (mSerialIterator == nullptr) {
         return *mStorageIterator->second.begin();
@@ -311,18 +297,6 @@
 }
 
 template <typename Derived>
-bool SerialStorage<Derived>::ConstIterator::operator==(
-    const typename SerialStorage<Derived>::ConstIterator& other) const {
-    return other.mStorageIterator == mStorageIterator && other.mSerialIterator == mSerialIterator;
-}
-
-template <typename Derived>
-bool SerialStorage<Derived>::ConstIterator::operator!=(
-    const typename SerialStorage<Derived>::ConstIterator& other) const {
-    return !(*this == other);
-}
-
-template <typename Derived>
 const typename SerialStorage<Derived>::Value& SerialStorage<Derived>::ConstIterator::operator*()
     const {
     if (mSerialIterator == nullptr) {
diff --git a/src/dawn/common/WeakRef.h b/src/dawn/common/WeakRef.h
index 548b85b..c5adc1b 100644
--- a/src/dawn/common/WeakRef.h
+++ b/src/dawn/common/WeakRef.h
@@ -84,8 +84,7 @@
     WeakRef(WeakRefSupport<T>* support) : mData(support->mData) {}
 
     // Comparison operators.
-    bool operator==(const WeakRef<T>& other) const { return mData == other.mData; }
-    bool operator!=(const WeakRef<T>& other) const { return mData != other.mData; }
+    bool operator==(const WeakRef<T>& other) const = default;
 
     // Promotes a WeakRef to a Ref. Access to the raw pointer is not allowed because a raw pointer
     // could become invalid after being retrieved.
diff --git a/src/dawn/common/ityp_bitset.h b/src/dawn/common/ityp_bitset.h
index 5371bc6..74bdcfb 100644
--- a/src/dawn/common/ityp_bitset.h
+++ b/src/dawn/common/ityp_bitset.h
@@ -50,8 +50,7 @@
         : mBits(static_cast<uint64_t>(bits.to_ullong())) {}
     Iterator64& operator++();
 
-    bool operator==(const Iterator64& other) const { return mBits == other.mBits; }
-    bool operator!=(const Iterator64& other) const { return !(*this == other); }
+    bool operator==(const Iterator64& other) const = default;
 
     Index operator*() const;
 
diff --git a/src/dawn/common/vulkan_platform.h b/src/dawn/common/vulkan_platform.h
index 99a2f9d..fa59376 100644
--- a/src/dawn/common/vulkan_platform.h
+++ b/src/dawn/common/vulkan_platform.h
@@ -95,8 +95,7 @@
     VkHandle& operator=(const VkHandle<Tag, HandleType>&) = default;
 
     // Comparisons between handles
-    bool operator==(VkHandle<Tag, HandleType> other) const { return mHandle == other.mHandle; }
-    bool operator!=(VkHandle<Tag, HandleType> other) const { return mHandle != other.mHandle; }
+    bool operator==(const VkHandle<Tag, HandleType>& other) const = default;
 
     // Comparisons between handles and VK_NULL_HANDLE
     bool operator==(std::nullptr_t) const { return mHandle == 0; }
