Разрешение перегрузки: назначение пустых скобок
Я написал кодS s;
...s = {};
, ожидая, что это закончится так же, какS s = {};
, Однако это не так. Следующий пример воспроизводит проблему:
#include <iostream>
struct S
{
S(): a(5) { }
S(int t): a(t) {}
S &operator=(int t) { a = t; return *this; }
S &operator=(S const &t) = default;
int a;
};
int main()
{
S s = {};
S t;
t = {};
std::cout << s.a << '\n';
std::cout << t.a << '\n';
}
Выход:
5
0
Мои вопросы:
Почемуoperator=(int)
выбрано здесь, вместо "неоднозначного" или другого?Есть ли аккуратный обходной путь, не меняяS
?Мое намерениеs = S{};
, Пишуs = {};
было бы удобно, если бы это работало. Я сейчас пользуюсьs = decltype(s){};
однако я бы предпочел не повторять тип или имя переменной.