Разрешение перегрузки: назначение пустых скобок

Я написал код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){}; однако я бы предпочел не повторять тип или имя переменной.

Ответы на вопрос(2)

Ваш ответ на вопрос