Punteros de función con parámetros por defecto en C ++

¿Cómo maneja C ++ los punteros de función en relación con las funciones con parámetros predeterminados?

Si tengo:

void foo(int i, float f = 0.0f); void bar(int i, float f); void (*func_ptr1)(int); void (*func_ptr2)(int, float); void (*func_ptr3)(int, float = 10.0f); 

¿Qué punteros de función puedo usar en relación con qué función?

Tanto foo() como bar() solo pueden asignarse a func_ptr2 .

§8.3.6 / 2 :

Un argumento predeterminado no es parte del tipo de una función. [Ejemplo:

 int f(int = 0); void h() { int j = f(1); int k = f(); // OK, means f(0) } int (*p1)(int) = &f; int (*p2)() = &f; // error: type mismatch 

–end ejemplo]

El argumento predeterminado no se puede proporcionar para los punteros a las funciones.