https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102749
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
>From the error message, I think the code looks like this:
#include <vector>
#include <variant>
using T = unsigned;
using Vec = std::vector<T>;
struct Cont
{
void insert(std::variant<Vec::iterator, void*>&&, int) { }
void insert(std::variant<Vec::const_iterator, void*>&&, int) { }
};
int main()
{
Vec::iterator i{};
Cont c;
c.insert(i, 1);
}
And GCC is correct to reject it, this code is invalid. The vector iterator can
be converted to variant<iterator> and to variant<const_iterator> and both
implicit conversion sequences are equal rank.
Clang with libc++ rejects it too, for the same reason.