Referencias

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
}