¿Por qué std :: bind se puede asignar a std :: function que no coincide con el argumento?

Tengo el código de la siguiente manera:

#include <functional>
#include <iostream>
using namespace std;
void F(int x) {
  cout << x << endl;
}
int main() {
  std::function<void(int)> f1 = std::bind(F, std::placeholders::_1);
  f1(100);  // This works, will print 100.

  int x = 0;
  std::function<void()> f2 = std::bind(F, x);
  f2();  // This works, will print 0.

  std::function<void(int)> f3 = std::bind(F, x);
  f3(200);  // BUT WHY THIS WORKS?????? It prints 0.
  return 0;
}

La información de mi compilador es: Apple LLVM versión 6.0 (clang-600.0.56) (basado en LLVM 3.5svn) Objetivo: x86_64-apple-darwin13.4.0 Modelo de subproceso: posix

Respuestas a la pregunta(1)

Su respuesta a la pregunta