Учитывая широту, которую компилятор C++ имеет в создании экземпляров временных объектов и в вызове механизмов, таких как оптимизация возвращаемого значения и т. д., не всегда ясно, глядя на какой-либо код, будет ли вызываться семантика перемещения или копирования (или сколько).
Такое ощущение, что эти примитивы существуют для случайных оптимизаций. То есть вы можете их получить, а можете и не получить. Кажется, что трудно разработать какую-либо стратегию управления ресурсами, которая использует ходы, когда трудно контролировать вызов самих ходов.
Есть ли способ четко (и просто) предсказать, где и сколько копий и перемещений может произойти в некотором коде? В идеале, чтобы это сделать, не нужно быть экспертом по внутренним устройствам компилятора.