См. этот пример:
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==
?