concepto std::equality_comparable_with no funciona para el operador de igualdad definido por el usuario.
Intento probar durante la compilación si dos tipos son comparables en igualdad, y he definido operator==
para ellos, así que deberían serlo. Sin embargo, el siguiente código no se compila:
#include <string_view>
struct A { int n; };
bool operator==(const A& a, const std::string_view s) { return a.n == s.size(); }
static_assert(std::equality_comparable_with<a, std::string_view="">);
(godbolt)
Incluso he intentado definir operator==
en el orden opuesto y para A
con sí mismo, pero tampoco funciona.
Por supuesto, algo como lo siguiente funciona perfectamente:
static_assert(std::equality_comparable_with<std::string, std::string_view="">);
¿Qué me estoy perdiendo aquí?</std::string,></a,>
davy.ai
El problema aquí es que definir
operator==
para dos tipos no los hace automáticamente comparables en igualdad en C++. Para poder usarstd::equality_comparable_with
para dos tipos, los tipos deben declararse explícitamente como comparables en igualdad utilizando la palabra claverequires
.Por ejemplo, el siguiente código debería compilarse correctamente:
Aquí, hemos definido un concepto
EqualityComparable
que requiere que tantot == u
comou == t
sean expresiones válidas y devuelvan unbool
. Luego podemos usar este concepto constatic_assert
para probar siA
ystd::string_view
son comparables en igualdad.Ten en cuenta que esta característica fue introducida solo en C++20, por lo que si estás trabajando con una versión anterior del lenguaje, es posible que necesites utilizar un enfoque diferente.</a,>