Você consegue adivinhar a saída deste programa trivial?
#include <vector>
#include <string>
#include <exception>
#include <iostream>
using namespace std;
int main()
{
try {
struct X {
explicit X(int) {}
X(string) {} // Just to confuse you more...
};
vector<X>{"a", "b"};
} catch (exception& x) {
cerr << x.what();
}
}
Bem, eu não poderia, o que me custou um dia de "pesquisa", antes de chegar aqui, finalmente destilando-o de algum código complexo da vida real (com aliases de tipo em todos os lugares, anon. uniões com não-membros do POD e mão- ctors/dtors orquestrados etc., apenas para dar uma vibe).
E... ainda não consigo ver o que está acontecendo! Alguém pode dar uma dica gentil? (Espero que seja apenas um ponto cego. Não faço mais C++ profissionalmente.)
/W4
Nota: compilação limpa* com MSVC e GCC (mais recentes) -Wall
; mesma saída em ambos (semanticamente).
* Mesmo sem a linha "confundir o leitor". Acho que vou ter pesadelos.
(Por favor, tenha paciência comigo por tentar não estragar tudo, explicando tudo ainda mais - afinal, isso é realmente autoexplicativo como está, certo? Exceto, exatamente o oposto para mim...)