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.