Я вижу потенциал для еще одного экзотического использования:
Предположим, у вас есть объект неизвестного типа, и вам нужно объявить другую переменную того же типа, например:
auto c=decltype(a*b)(123);
Когда такой шаблон широко используется, decltype становится очень раздражающим.
Этот случай может возникнуть при использовании некоторой системы интеллектуального типа, которая автоматически изобретает тип результата функций и операторов на основе типов аргументов.
Теперь, если каждая специализация каждого типа этого типа системы оснащена
магическое определение operator()
как это:
template<????> class Num<???>{
//specific implementation here
constexpr auto operator()(auto...p){return Num(p...);}
}
decltype()
больше не нужно, вы можете написать просто:
auto c=(a*b)(123);
Потому что operator () объекта перенаправляет на конструктор своего собственного типа.