Вот некоторый код, где шаблон функции принимает функцию для вызова в качестве аргумента нетипичного шаблона:
template <class R, R func() >
auto Call() -> R
{
return func();
}
int f() { return 1; }
int main()
{
Call<int, f>(); // OK
Call<f>(); // Error
}
Есть ли способ сделать это вызываемым без необходимости повторения возврата функциитипа, как в Call<f>()
?
Это может быть сделано через препроцессор, #define CALL(f) Call<decltype(f()), f>
, но я хотел бы знать, если это можно сделать без препроцессора.