Ma conclusion du moment sur le sujet, c'est que c'est une dichotomie assez artificielle est assez propre au C++ à cause de comment les données transitent en sortie des fonctions (copie ou truc alloué).
Il n'y a pas de références absolues. J'ai l'impression que les premières choses viennent de Stepanov (mais sans certitudes) qui va plus loin en introduisant les "objets réguliers" (valeur + ordonnables).
Mes quelques pointeurs sur ces sujets sont, dans le désordre:
- http://www.angelikalanger.com/Articl...ls/Equals.html (ou quand Java se pose une question proche)
- http://akrzemi1.wordpress.com/2011/0...onstructor-qa/ (indirectement)
- http://www.mr-edd.co.uk/blog/another...plicit_vtables (des contournements)
- http://blog.emmanueldeloget.com/inde...C3%A9placement (des explications)
- http://akrzemi1.wordpress.com/2012/0...lue-semantics/ (d'autres explications)
- http://stackoverflow.com/questions/2.../269313#269313
- http://www.drdobbs.com/cpp/if-c-obje...equa/240146950 (Koenig qui en parle dans un article récent sur le DDJ)
Coplien a aussi du en parler vu que la FCOC s'applique sur les objets valeurs. Ainsi qu'au travers de l'idiome enveloppe-lettre qui permet de rendre affectables des objets tirés de hiérarchies polymorphes.
Bref. Après, cette dichotomie aussi artificielle soit-elle, nous permet de disposer de recettes de cuisine prêtes à l'emploi (dans le jardon on dit patterns ou idiomes) en fonction du type de classe que nous sommes en train d'écrire.
Concernant les conteneurs standards, ils sont légèrement bâtards à mon gout. Syntaxiquement parlant ils se comportent comme des valeurs (copiables), sémantiquement parlant, ils peuvent aussi se comporter comme des entités (car altérables => ils ont une identité propre que l'on utilise régulièrement)