Здравствуйте, artelk, Вы писали:
A>Так вот, нельзя ли автоматизировать все это?
В F# пошли этим путем и придумали тип unit аналогичный FakeVoid. Результатом стало ухудшение совместимости с дотнетными библиотеками (и так хреновая) и непроизводительные затраты, так как даже возвращение пустой структуры влияет на производительность вызова.
На мой взгляд, можно сделать следующее: FakeVoid можно ввести в состав стандартной библиотеки и, возможно, реализовать некие функции, макросы или операторы для упрощения генерации оберток.
Можно так же сделать закладку в компиляторе, чтобы приведение типов от X -> void к X -> Y автоматически вставляла лямбду типа X -> FakeVoid.
А идея вот встраивание этого дела в язык, без поддержки со стороны рантайма, мне хорошей не кажется.
Можно было бы попробовать для каждой функции генерировать перегрузку для void, но тогда это не будет работать со внешними библиотеками и может привести к генерации кучи ненужных дубликатов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.