std::cout << vec.emplace_back(7);
это просто удобство, поэтому вы можете сделать больше, чем одну вещь в выражении.
vec.emplace_back().reg();
все, что сделано, может быть воспроизведено с помощью
(void(vec.emplace_back()), vec.back()).reg();
в версиях, предшествующих C ++ 17 (void здесь - перспективная парноия)
Это обычный шаблон для создания объекта и его немедленного использования; возвращаемое значение делает его немного легче.