Ответ 1
Я считаю, что этот код неверен. Параметр функции Log
не может использоваться для вывода аргумента шаблона в этом случае, потому что аргумент представляет собой невыводимый контекст.
Из [temp.deduct.type] в стандарте p5 перечисляет не выводимые контексты, а p5.5 говорит:
Параметр функции, для которого аргумент не может быть выполнен потому что связанный аргумент функции является функцией или набором перегруженные функции (13.4) и одно или несколько из следующих утверждений:
и p5.5.3 гласит:
набор функций, предоставляемых в качестве аргумента, содержит один или несколько функциональные шаблоны.
Моя интерпретация заключается в том, что у вас есть параметр функции, для которого аргумент функции является (указателем на) функцию, и эта функция является шаблоном функции.
Возможно, поскольку это не набор перегрузки, это может быть что-то, что можно было бы разрешить в будущем, но я прочитал стандарт, не гарантируя, что этот метод будет работать.