Estou lendo a documentação em std::expected::operator==
, e aparentemente não é amigável ao SFINAE. Em vez de "não participa da resolução de sobrecarga se [os tipos não forem eq-comparáveis]", diz "o programa está malformado [nesse caso]".
E de fato:
#include <concepts>
#include <expected>
struct A {};
static_assert(!std::equality_comparable<std::expected<A, A>>);
Esta afirmação falha no MSVC e no Clang com libc++ e causa um erro grave no Clang com MSVC STL.
Mas por que não é compatível com SFINAE?
std::expected<T,U>
requer que ambos T
e U
sejam completos de qualquer forma, então aparentemente nada impede que todas as operações nele sejam compatíveis com SFINAE.