Ça ne fonctionne pas sans, c1 et c2 sont vues comme des références, non comme une rvalue.
Pour généraliser, toute variable est une référence, std::move est donc obligatoire.