问题:迭代器做函数模板参数


背景:
打算采用以迭代器的方式递归进行二分查找,具体代码如下:
该模板函数以该target元素的迭代器的方式返回

template ::value_type,
        typename Compare = const std::less>
IterT bsearch_r(IterT first,
            IterT last,
            ValueT target,
            Compare comp = Compare())
{
    
        IterT result = last;
        IterT mid = first + std::distance(first, last) / 2;
        if(comp(*mid, target))
        {
            first = mid + 1;
            bsearch_r(first, last, Compare());
        }
        else if(comp(target, *mid))
        {
            last = mid;
            //bsearch_r(first, last, Compare());
        }
        else
        {
            result = mid;
            return result;
        }
        return result;

}

调用代码如下:
计算距离第一个元素的距离:

template 
void test_bsearch(const VecT &test, T target)
{
    auto it = bsearch_r(test.begin(), test.end(), target);
    std::cout << std::distance(test.begin(), it)<< std::endl; 
}


int main()
{
    std::vector test{0, 0, 1, 2, 3, 4, 4, 5, 5, 5, 5, 5, 6, 7};  // std::less()

    test_bsearch(test, 5);                     

    return 0;

但报错,具体如下:

但还不知道是什么原因,特此记录
望各位大神不吝赐教