Les exigences des conteneurs ont changé de C++03 à C++11. Alors que C++03 avait des exigences générales (par exemple, la constructibilité par copie et la capacité d'assignation pour vector), C++11 définit des exigences détaillées pour chaque opération sur le conteneur (section 23.2).
En conséquence, vous pouvez par exemple stocker un type qui est constructible par copie mais non assignable - tel qu'une structure avec un membre const - dans un vecteur tant que vous effectuez uniquement certaines opérations qui ne nécessitent pas d'assignation (la construction et push_back
sont de telles opérations; insert
ne l'est pas).
Ce qui me fait me demander : est-ce que cela signifie que la norme permet maintenant vector
? Je ne vois aucune raison pour laquelle cela ne devrait pas être le cas - const T
, tout comme une structure avec un membre const, est un type qui est constructible par copie mais non assignable - mais j'aurais peut-être manqué quelque chose.
(Une partie de ce qui me fait penser que j'ai peut-être manqué quelque chose, c'est que gcc trunk plante si vous essayez d'instancier vector
, mais cela fonctionne avec vector
où T a un membre const).