См. этот пример:
struct Foo
{
int a;
int b;
bool operator == (const Foo & x)
{
return a == x.a && b == x.b;
}
};
int main ()
{
Foo a;
a = {1, 2};
if (a == {1, 2}) // error: expected primary-expression before ‘{’ token
{
}
}
Строка a={1,2} прекрасна. Скобки преобразуются в Foo для соответствия типу аргумента неявного метода operator=. Он по-прежнему работает, если operator= определяется пользователем.
Ошибки строки if (a=={1,2}}), как указано.
Почему выражение {1,2} не конвертируется в Foo для соответствия пользовательскому методу operator==?