Это гарантированное поведение, или как компилятор решит и в зависимости от уорвня оптимизации?
Какие-то обязательно, какие-то по желанию (подробности смотреть в справочнике типа cppreference). Если память не подводит, то nrvo на усмотрение компилятора, с -О0 не должно применяться по идее. Вообще повторю - не закладывайтесь на какой-то порядок вызова конструктов, хотя объект мимо пользоват кт-ра ге создастся, конечно, в остальном там оптимизация на оптимизации.