Здравствуйте, rg45, Вы писали:
V>>>Какой, хотя бы из двух, overloads() вызовется здесь? А если я третий добавлю?
σ>>А если бы было overloads(func())? 🤡
R>Я думаю, что это просто немного разные сценарии. По сложности разные. В последнем случае временный объект (ну или ссылка — не суть) создается для того, чтоб выполнить над ним ровно одно действие. Это действительно простой случай и без знания типа объекта, наверное, можно легко обойтись в большинстве случаев. В предыдущем же примере, как я понимаю, подразумевается, что над объектом могут выполняться какие-то еще другие действия, прежде чем он будет передан в функцию overloads. Вероятно также, что этот объект не будет единственным в этом фрагменте программы. То есть, предыдущй пример в целом сложнее и явное указание типов действительно облегчает чтение кода, тут я полностью согласен.
Эдак можно и про виртуальные функции сказать:
class SomeBaseClass { public: virtual auto overloads() -> void = 0; };
SomeBaseClass* var = func();
var->overloads();