Возможно ли ... чтобы компилятор избегал использования временного значения при назначении копирования / перемещения с троичным оператором
Это интересный вопрос из-за того, как вы написаликод.
В общее , да.Компилятору разрешается переставлять или исключать код при условии, что наблюдаемый результат такой же, как если бы он выполнил код .Это называется правилом «как будто».
Компилятору также разрешается исключать копии при других обстоятельствах, даже если будет наблюдаться изменение в наблюдаемом поведении, например, RVO (оптимизация возвращаемого значения).
Однако в вашем случае все конструкторы имеют наблюдаемое поведение, которое нельзя изменить - они испускают символы в стандартный вывод!
Так что в этом конкретном случае у компилятора нет иного выбора, кроме как следовать потоку вашего исходного кода.