Здравствуйте, Sinclair, Вы писали:
ЕМ>>Да можно, почему нет. Но тогда нужно прекратить вынос конструкций, генерирующих исполняемый код, в заголовки, включаемые множеством разных файлов. А это повлечет ухудшение оптимизации кода. Какую-то оптимизацию нынче делают линкеры, их возможности далеки от компиляторских. S>Дело не в ухудшении оптимизации. А в том, что по-другому — никак. Вот у нас компилятор видит вызов какой-нибудь функции call(f, "foo", 42). Чтобы понять, что такое call, ему может потребоваться сделать довольно много приседаний. Если у нас call объявлена на основе шаблонной магии, компилятор начинает раскручивать шаблоны. При этом sfinae означает, что часть работы, возможно, будет выполнена впустую — раскрытый шаблон не подойдёт, и надо будет проверять другие варианты. Вот это всё в принципе не получится перенести в линкер — линкер не умеет раскрывать шаблоны и выбирать наилучшую перегрузку из возможных.
Интересно, а кто-то из общающихся смотрел отчеты компиляторов о том, на что время уходит?
(у GCC и clang-а есть ключики, которые пользволяют отчеты показывать, вроде `-ftime-report`)