Рассматривать этот Статья MSDN («Аргументы по умолчанию») и следующий код:
#include <stdio.h>
void print(int x) {
printf("%d\n", x + 537);
}
typedef void (*Func)(int x = 0);
int main() {
Func f = print;
f();
return 0;
}
В статье утверждается, что «Аргументы по умолчанию могут быть отменены для указателей на функции. Например: int (*pShowIntVal)( int i = 0 );
«. Как я понял, это означает, что приведенный выше код должен успешно скомпилироваться. Однако это не так:
a.cpp
a.cpp(7) : error C2383: 'Func' : default-arguments are not allowed on this symbol
a.cpp(11) : error C2198: 'Func' : too few arguments for call
Похоже, я неправильно понял статью. Какой смысл, какова правильная интерпретация?
Аргумент по умолчанию является частью функции декларация но это не часть его тип. Таким образом, вы можете написать:
void f(int x = 0);
но тип е по-прежнему
void(int x)
И, следовательно, указатель на тип функции не может содержать аргументы по умолчанию.
(Ссылка: § 8.3.6 / 9 [dcl.fct.default]: «Аргумент по умолчанию не является частью типа функции.»)
Других решений пока нет …