Of course it did, silly me. You specialized for `std::pair<EntityId, EntityId>`, right? The implementation in `pair_hash.h` (which is indeed incorrect, good catch) is a partial specialization, so the two don't clash. The compiler would just prefer your full specialization for pairs of `EntityId`s wherever it can when the right (or rather, wrong) headers are included.