totally order compare
enable move-only types to be stored in fused::tuple