Your array decays to a pointer inside a function declaration (if you don't take it by reference). What you can do is wrap your default value in a constant, like this (note that you lose the array size with this approach if you don't pass it as an extra parameter):
using OperationType = float(*)(float*, int);
constexpr OperationType DefaultOperations[] = {lb, ub};
float operation(Stats* ptr, float* data, int y, const OperationType* fp = DefaultOperations);
If you always know the the size of your array at compile time you can use std::array
like this:
using OperationType = float(*)(float*, int);
template <std::size_t Size>
float operation(Stats* ptr, float* data, int y, std::array<OperationType, Size> fp = {lb, ub});