我看到的两个问题:
std::enable_if有第二个可选类型参数,即std::enable_if<>::type. 默认情况下设置为,void因此您的返回类型已经是voidfrom std::enable_if<>::type。但是,由于您要enable_if输入返回类型,我建议您明确指定返回类型为void。
因此,您的问题的解决方案如下所示:
template <class RandomAccessIterator, class Compare>
typename std::enable_if<
std::is_same<std::random_access_iterator_tag, RandomAccessIterator>::value,
void
>::type quick_sort(RandomAccessIterator first, RandomAccessIterator last, Compare compare) {
sorting(first, last, 0, last - first - 1, compare);
}
或者,您可以std::enable_if在模板参数中使用:
template <
class RandomAccessIterator,
class Compare,
typename std::enable_if<
std::is_same<std::random_access_iterator_tag, RandomAccessIterator>::value,
std::nullptr_t
>::type = nullptr
>
void quick_sort(RandomAccessIterator first, RandomAccessIterator last, Compare compare) {
sorting(first, last, 0, last - first - 1, compare);
}