Resolución de sobrecarga: asignación de llaves vacías

Escribi algun codigoS s; ...s = {};, esperando que termine igual queS s = {};. Sin embargo no lo hizo. El siguiente ejemplo reproduce el problema:

#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';
}

El resultado es:

5
0

Mis preguntas son:

Por que esoperator=(int) seleccionado aquí, en lugar de "ambiguo" o el otro?¿Hay una solución ordenada, sin cambiarS?

Mi intención ess = S{}; . Escrituras = {}; Sería conveniente si funcionara. Actualmente estoy usandos = decltype(s){}; sin embargo, preferiría evitar repetir el tipo o el nombre de la variable.

Respuestas a la pregunta(2)

Su respuesta a la pregunta