Sto provando a costruire un oggetto in una mappa che contiene un atomico, quindi non può essere né copiato né spostato AFAICT.Costruisci un oggetto non modificabile in una mappa
La mia lettura di C++ reference è che la mappa emplace
dovrebbe essere in grado di farlo. Ma il seguente codice non viene compilato a causa di costruttori eliminati o inesistenti. Utilizzare make_pair
non aiuta.
#include <atomic>
#include <unordered_map>
class Z {
std::atomic<int> i;
};
std::unordered_map<int, Z> map;
void test(void) {
map.emplace(0, Z()); // error
map[0] = Z(); // error
}
È possibile, e in caso contrario, perché no?
EDIT: compilatore gcc 4.8.1 è, in Linux
Che compilatore si usa? – Drop
'emplace' prende gli argomenti del costruttore, ma stai passando un oggetto temporaneo. –
@NeilKirk Quindi in quale altro modo si potrebbe invocare il costruttore no-arg? –