Насколько это безопасно, зависит от того, передан ли объект-функция по значению или по ссылке.Как показывает ваш код, функция в «CreateFunction» передается по значению и, более того, копируется по значению в возвращаемой лямбде.
Поскольку функция была скопирована по значению, исходное значение «f»ни в коем случае не требуется разрешать вызов вновь создаваемой функции.
Как примечание, может быть лучше использовать получение const-ссылки внутри CreateFunction, так как это минимизирует количество раз, которое функцияобъект копируется по значению.