Я узнал, что его нетривиально иметь чистый синтаксис, например, в:
std::function<int(float, bool)>
Если я объявляю функцию как:
template <class RetType, class... Args>
class function {};
Это был бы обычный синтаксис для определения функций templated types:
function<int,float,bool> f;
Но он работает со странным трюком с частичной специализированной специализацией
template <class> class function; // #1
template <class RV, class... Args>
class function<RV(Args...)> {} // #2
Почему? Почему мне нужно предоставить шаблон пустой общей форме с пустым параметром типа (# 1) или иначе он просто не будет компилировать