Здравствуйте, Went, Вы писали:
EP>>Не пойму, то есть ты за то чтобы в этом случае auto вообще не использовать? Тогда это ортогонально struct vs tuple. W>Я просто не могу представить реального случая, где бы подобный подход мог иметь смысл.
Любая функция конвертации строки в структуру или число.
W>Если это обычная функция, возвращающая, например код ошибки, или результат исполнения, который "не поместился" в скалярный тип, то я не вижу смысла пихать определение структуры вовнутрь ее. За сомнительную экономию нескольких идентификаторов и пунктуаций мы получаем: W>1. Кишки функции наружу.
В каком смысле? То, что определение описано внутри функции, а не снаружи? А typedef key key_type; у std::map — это кишки класса наружу? Нет? Почему?
W>2. Невозможность использовать этот тип где либо еще, объявлять его явно.
Это плюс, а не минус. Это не позволит перепутать результат функции с чем-то ещё.
W>3. Необходимость лезть в реализацию функции для поиска ее возврата.
С кодами int, bool или "не дай бог" errno() легче что-ли?
W>Лучше определить структуру явно в заголовке класса.
Не легче. Это сильно засоряет scope класса бессмысленными типами имеющими отношение только к конкретным функциям.
W>Если же это какое-то значимое данное, состав которого неочевидным образом определяется на момент компиляции тела функции, то без статической рефлексии или замены на туплы, мы просто не будем знать что с ней делать дальше. Поэтому это тоже не вариант. W>Так в каком же случае это полезно?
Например, функция std::stod вместо бросания исключения могла бы возвращать результат, код конвертации и указатель на константную строку с описанием ошибки.