Это кратко обсуждалось Хербом Саттером во время интервью. Ваше требование к auto
аргументам фактически ничем не отличается от требования, что любая функция должна быть объявлена с auto
, например:
auto add(auto a, auto b) -> decltype(a + b) { return a + b; }
Тем не менее, обратите внимание, что на самом деле это вовсе не функция, а скорее функция template , родственная:
template <typename S, typename T>
auto add(S a, T b) -> decltype(a + b) { return a + b; }
Таким образом, вы, по сути, запрашиваете средство для превращения любой функции в шаблон путем изменения ее аргументов. Поскольку шаблоны - это совсем другой вид сущности в системе типов C ++ (подумайте обо всех специальных правилах для шаблонов, таких как двухфазный поиск и дедукция), это будет радикальным изменением дизайна с непредвиденными последствиями, что, безусловно, скоро будет в стандарте.