summaryrefslogtreecommitdiffstats
path: root/src/corelib
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib')
-rw-r--r--src/corelib/itemmodels/qrangemodel_impl.h16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/corelib/itemmodels/qrangemodel_impl.h b/src/corelib/itemmodels/qrangemodel_impl.h
index 55c7930cc36..96dacda0260 100644
--- a/src/corelib/itemmodels/qrangemodel_impl.h
+++ b/src/corelib/itemmodels/qrangemodel_impl.h
@@ -238,14 +238,16 @@ namespace QRangeModelDetails
: std::true_type
{};
- // we use std::rotate in moveRows/Columns, which requires std::swap
+ // we use std::rotate in moveRows/Columns, which requires std::swap and the
+ // iterators to be at least a forward iterator
template <typename It, typename = void>
struct test_rotate : std::false_type {};
template <typename It>
struct test_rotate<It, std::void_t<decltype(std::swap(*std::declval<It>(),
*std::declval<It>()))>>
- : std::true_type
+ : std::is_base_of<std::forward_iterator_tag,
+ typename std::iterator_traits<It>::iterator_category>
{};
template <typename C, typename = void>
@@ -512,8 +514,12 @@ namespace QRangeModelDetails
using row_type = typename range_traits<QRangeModelDetails::wrapped_t<Range>>::value_type;
template <typename R = row_type,
- std::enable_if_t<std::conjunction_v<std::is_destructible<wrapped_t<R>>,
- is_owning_or_raw_pointer<R>>, bool> = true>
+ std::enable_if_t<
+ std::conjunction_v<
+ std::is_destructible<QRangeModelDetails::wrapped_t<R>>,
+ is_owning_or_raw_pointer<R>
+ >,
+ bool> = true>
auto newRow() -> decltype(R(new QRangeModelDetails::wrapped_t<R>)) {
if constexpr (is_any_of<R, std::shared_ptr>())
return std::make_shared<QRangeModelDetails::wrapped_t<R>>();
@@ -587,7 +593,7 @@ namespace QRangeModelDetails
template <typename P, typename R>
using protocol_mutable_childRows_test = decltype(refTo(std::declval<P&>()
- .childRows(std::declval<wrapped_t<R>&>())) = {});
+ .childRows(std::declval<QRangeModelDetails::wrapped_t<R>&>())) = {});
template <typename P, typename R>
using protocol_mutable_childRows = qxp::is_detected<protocol_mutable_childRows_test, P, R>;