прочти внимательно пост номер 9. Ты можешь конечно поспорить с компилятором, но он свято считает что тип суммы - QString (о чем и говорит typeid(...).name())
С компилятором и вами я полностью согласен. Оператор сложения возвращает QString. Но то, что это происходит из-за QString ( const QLatin1String & str ) без дополнительного шаманства я не согласен. Я привел тривиальный класс который имеет оператор сложения и конструктор , принимающий ссылку на другой класс. Это не делает чуда и объекты другого класса складываться не начинают.