auto lsqr = [](const int &n) -> int { return n*n; };
int (*pointer)(const int&) = lsqr; // Нормально
int (&refernce)(const int&) = lsqr; // Ошибка
//Нормально, извращение
int (&perversion)(const int&) = *(int(*)(const int&)) lsqr;
int n = 5;
const std::function& refernce = std::bind([](const int &n) {return n*n; }, n);
const int& x1 = refernce(); // out: x = 25