for (Task t : tasks) { // COPIA
t.markDone(); // cambia solo la copia
}
// El vector sigue igual, ninguna tarea se marca como hecha
for (Task& t : tasks) { // REFERENCIA
t.markDone(); // cambia el original
}
// Ahora todas las tareas del vector están hechas
for (const Task& t : tasks) { // REFERENCIA CONST
std::cout << t.title; // puedes leer
// t.markDone(); // ERROR: no se puede modificar
}