std::set tien dos elementos pero muestra solo uno C++

Z

Haber me explico un poco ,tengo este operador ,recibe un objeto de la clase articulo y a su vez esta clase tiene un método Articulo::Autores() que devuelve un set de punteros a autores, lo extraño es que si el set tiene 2 elementos el bucle solo itera una vez...y por tanto me muestra solo un elemento cuando llamo al operador,pero si tiene 1 o 3 elementos o mas no hay problema

ostream& operator<<(ostream& os,const Articulo& art){
	cout<<"nnº de elementos = "<<art.autores().size();//esta linea es para saber cuantos elementos tiene..y tiene 2!!!
	bool poner_coma=false;
	os<<"["<<art.referencia()<<"] "<<"""<<art.titulo()<<"", de ";
	for(auto it=art.autores().begin();it!=art.autores().end();++it){
		if(poner_coma)
			os<<", ";
		os<<(*it)->apellidos();
		if(!poner_coma)
			poner_coma=true;
	}
	os<<". "<<art.f_publi().anno()<<"."<<" "<<fixed << std::setprecision(2)<<art.precio()<<" €";
	art.imp_esp(os);
	return os;
}
Gif

#1 por que no usas un ranged for?

for(auto& autores: art.autores()){

}

y lo del

if(!poner_coma)
    poner_coma=true;

yo pondría

poner_coma = !poner_coma;

Mirate C++11

Z

Solucionado

Usuarios habituales