Когда еще в середине 2000-х смотрел Microsoft Extensions в VC++, обратил внимание на
compiler-supported type traits, но почему-то посчитал, что они поддерживаются только в CLR — ну и забыл о них. На днях обнаружил, что почти все поддерживаются и в native, и обрадовался было, но сразу же сообразил, что в VC++ нет адекватного способа их использовать. Импотентские __if_exists/__if_not_exists, придуманные чьим-то межушным ганглием, имеют крайне ограниченное применение.
И вот интересно стало: в документации примеры использования этих traits приведены исключительно в run-time. А какой в этом может быть
практический смысл? Что дельного можно построить на этих конструкциях, используя результаты проверок только во время выполнения? Или это такой предельно уродливый способ диагностики потенциальных проблем, доступный только в run-time?
А чтобы использовать это во время компиляции, придется опять же городить многоэтажные мета-конструкции, избежать которых, по сути, и призваны эти предикаты.
В общем, с какой практической целью можно было выродить
такое, упорно избегая вводить в язык что-то вроде __if для проверки во время компиляции любого константного выражения?