Допустимо ли, чтобы лямбда, по сути, замыкалась сама на себя?

Действительна ли эта лямбда-рекурсия?

#include 
#include 

int main() {
   std::function g = [&g](int k) {
       return (k ? k * g(k-1) : 1);
   };

   std::cout << g(10); // 3628800
}

Она вроде бы компилируется и выполняется нормально, но я нервничаю по поводу закрытия g в том же операторе, в котором я его инициализирую. Строгая валидность по шкале 1-10...?

43
задан Lightness Races with Monica 21 December 2011 в 19:19
поделиться