Здравствуйте, ScorpZ, Вы писали:
Минимальный пример:
#include <cassert>
#include <functional>
typedef void FUN(int);
typedef FUN* FUNPTR;
typedef std::function<FUN> ffPtrT;
int main()
{
assert(!ffPtrT(nullptr));
assert(!ffPtrT((FUNPTR)nullptr)); // assertion failed
}
Поскольку в тернарном операторе
(cond ? &f1 : nullptr) универсальный std::nullptr_t конкретизируется до типизированного FUNPTR, — получаем то, что получаем.
Вместо ffPtrT(nullptr) в ветке тернарного оператора можно написать просто ffPtrT().