# Struct SIMD - Missing trait 'EqualityComparable'?

**URL:** <https://forum.modular.com/t/struct-simd-missing-trait-equalitycomparable/1605>\
**Category:** Mojo\
**Created:** [June 8, 2025, 11:39pm UTC](https://forum.modular.com/t/struct-simd-missing-trait-equalitycomparable/1605 "2025-06-08T23:39:06Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![EzRyder](https://sea1.discourse-cdn.com/flex001/user_avatar/forum.modular.com/ezryder/32/133_2.png) [@EzRyder](https://forum.modular.com/u/EzRyder)\
**Post date:** [June 8, 2025, 11:39pm UTC](https://forum.modular.com/t/struct-simd-missing-trait-equalitycomparable/1605/1 "2025-06-08T23:39:06Z")

</div>

Any reason `struct SIMD` is missing the `EqualityComparable` trait? It appears to have the methods implemented.  
As shown below, I’m seeing the error: `argument type 'SIMD[uint64, 1]' does not conform to trait 'EqualityComparable & Copyable & Movable'`  
`Mojo 25.4.0.dev2025060805`

```mojo
foos = List[UInt64]()
some_foo = 12345

# failed to infer parameter #2, argument type 'SIMD[uint64, 1]' does not conform to trait 'EqualityComparable & Copyable & Movable'
if some_foo in foos: # <-- Error here
    pass

struct SIMD[dtype: DType, size: Int](
    Absable,
    Boolable,
    Ceilable,
    CeilDivable,
    Copyable,
    Movable,
    DevicePassable,
    ExplicitlyCopyable,
    Floatable,
    Floorable,
    Hashable,
    _HashableWithHasher,
    Indexer,
    PythonConvertible,
    Representable,
    Roundable,
    Sized,
    Stringable,
    Writable,
):
    ...

```

---

<div class="post-metadata">

**Author:** ![xtxtxtxtxtx](https://avatars.discourse-cdn.com/v4/letter/x/dec6dc/32.png) [@xtxtxtxtxtx](https://forum.modular.com/u/xtxtxtxtxtx)\
**Post date:** [June 8, 2025, 11:47pm UTC](https://forum.modular.com/t/struct-simd-missing-trait-equalitycomparable/1605/2 "2025-06-08T23:47:54Z")

</div>

`EqualityComparable` means returning single boolean. But comparison with vector means returning vector of boolean.

```mojo
[1, 2, 3, 4] == [1, 2, 5, 6] # [True,True,False,False]

```

So you can’t return single boolean for vector. As for scalar case It will be added after the `requires` clause is added.

---

<div class="post-metadata">

**Author:** ![EzRyder](https://sea1.discourse-cdn.com/flex001/user_avatar/forum.modular.com/ezryder/32/133_2.png) [@EzRyder](https://forum.modular.com/u/EzRyder)\
**Post date:** [June 8, 2025, 11:48pm UTC](https://forum.modular.com/t/struct-simd-missing-trait-equalitycomparable/1605/3 "2025-06-08T23:48:07Z")

</div>

Using `DType.uint64` as shown below emits an error on assignment, `cannot implicitly convert 'DType' value to 'Copyable & Movable' in type parameter`.

```mojo
fn main():
    # cannot implicitly convert 'DType' value to 'Copyable & Movable' in type parameter
    foos = List[DType.uint64]() # <-- Error here
    some_foo = 12345

    if some_foo in foos:
        pass

struct DType(
    Copyable,
    Movable,
    EqualityComparable,
    ExplicitlyCopyable,
    Hashable,
    Representable,
    Stringable,
    Writable,
    _HashableWithHasher,
):
    ...

```

---

<div class="post-metadata">

**Author:** ![xtxtxtxtxtx](https://avatars.discourse-cdn.com/v4/letter/x/dec6dc/32.png) [@xtxtxtxtxtx](https://forum.modular.com/u/xtxtxtxtxtx)\
**Post date:** [June 8, 2025, 11:53pm UTC](https://forum.modular.com/t/struct-simd-missing-trait-equalitycomparable/1605/4 "2025-06-08T23:53:19Z")

</div>

Also there is a thread below too.[Why Float is Not Comparable](https://forum.modular.com/t/why-is-float-not-comparable/1479)

---

<div class="post-metadata">

**Author:** ![clattner](https://sea1.discourse-cdn.com/flex001/user_avatar/forum.modular.com/clattner/32/201_2.png) [@clattner](https://forum.modular.com/u/clattner)\
**Post date:** [June 9, 2025, 8:19am UTC](https://forum.modular.com/t/struct-simd-missing-trait-equalitycomparable/1605/5 "2025-06-09T08:19:19Z")

</div>

Yep, my 2c is that we need to fix this. `SIMD` not conforming to equatable and comparable will break pretty much all generic algorithms from working with floating point and sized integer types, and will prevent merging `Int` and `UInt` into `SIMD` someday.

---

<div class="post-metadata">

**Author:** ![joe](https://sea1.discourse-cdn.com/flex001/user_avatar/forum.modular.com/joe/32/471_2.png) [@joe](https://forum.modular.com/u/joe)\
**Post date:** [June 9, 2025, 4:27pm UTC](https://forum.modular.com/t/struct-simd-missing-trait-equalitycomparable/1605/6 "2025-06-09T16:27:10Z")

</div>

Agreed. This is one of the team’s priorities for Q3.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex001/uploads/modular/original/1X/2751e0fbdc595a99718b216730957e9db4448cfd.jpeg) [@system](https://forum.modular.com/u/system)\
**Post date:** [December 6, 2025, 4:27pm UTC](https://forum.modular.com/t/struct-simd-missing-trait-equalitycomparable/1605/7 "2025-12-06T16:27:11Z")

</div>

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.
