Почему std :: bind может быть назначен несоответствующему аргументу std :: function?

У меня есть код следующим образом:

#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;
}

Информация моего компилятора: Apple LLVM версии 6.0 (clang-600.0.56) (на основе LLVM 3.5svn) Цель: x86_64-apple-darwin13.4.0 Модель потока: posix

Ответы на вопрос(0)

Ваш ответ на вопрос