The greedy assignment operator is missing a constraint against assigning from the same type.
using FR = tl::function_ref<void(void)>;
static_assert(std::is_trivially_assignable<FR, FR&>::value, ""); // fails
static_assert(std::is_trivially_assignable<FR, const FR&>::value, ""); // OK
static_assert(std::is_trivially_assignable<FR, FR&&>::value, ""); // fails
The constraint is in P0792r5.