Si, effettivamente ho notato a posteriori che il carattere immesso nello switch era vuoto.
Così ho modificato la funzione Inserimento del controllo input in:
codice:
template <typename T>
T Inserimento (T ins){
int a, b;
T output;
std::string::size_type sz;
do{
std::string str;
std::cin.clear();
std::getline(std::cin, str);
if(typeid(ins) == typeid(int)){
a = 0;
try{
output=std::stoi(str,&sz);
}catch(const std::invalid_argument& ia){}
}else if(typeid(ins) == typeid(char)){
a = 1;
output = str[0];
}
else {
a = 2;
//output=str;
}
b = ReadStr(str);
if (a != b){
std::cout << "Inserimento non valido, riprovare -> \tScelta selezionata: ";
} else {return output;}
}while (a != b);
con la modifica che nel resto del programma Inserimento viene così assegnato:
Così infatti è tutto più controllato e lo switch non riscontra impedimenti.
Ho tuttavia un'altra difficoltà: se lancio il controllo input anche con la riga che ora è commentata in Inserimento (//output=str;), mi segnala errore in quanto riscontrerebbe difficoltà assegnare la stringa str alla variabile output nei casi in cui questa sia definita int o char.