Проблема в том, что &boolFunc
- это не std::function
(любого типа), это указатель на функцию. Как таковой, он может быть преобразован в любой std::function
, с которым он совместим, но ни один из них не лучше, чем любой другой. В частности, поскольку любой тип указателя может быть неявно преобразован в bool, &boolFunc
может преобразовать в std::function<void(T *)>
для любого типа указателя.
В результате он одинаково хорошо соответствует любому варианту типа.
Чтобы избежать этого, вам нужно явно указать, какой std::function
вы хотите:
myVariant = std::function<void(const bool)>(&boolFunc);