diff --git a/include/xgboost/span.h b/include/xgboost/span.h index 13a363e17..0764849eb 100644 --- a/include/xgboost/span.h +++ b/include/xgboost/span.h @@ -422,24 +422,27 @@ class Span { template ::value && !detail::IsSpan::value && + !std::is_const::value && + !detail::IsSpan::value && + std::is_convertible::value && std::is_convertible::value && - std::is_convertible< - typename Container::pointer, - decltype(std::declval().data())>::value>> - XGBOOST_DEVICE Span(Container& _cont) : // NOLINT - size_(_cont.size()), data_(_cont.data()) {} + decltype(std::declval().data())>::value>::type> + Span(Container& _cont) : // NOLINT + size_(_cont.size()), data_(_cont.data()) { + static_assert(!detail::IsSpan::value, "Wrong constructor of Span is called."); + } template ::value && !detail::IsSpan::value && + std::is_const::value && + !detail::IsSpan::value && std::is_convertible::value && - std::is_convertible< - typename Container::pointer, - decltype(std::declval().data())>::value>> - XGBOOST_DEVICE Span(const Container& _cont) : size_(_cont.size()), // NOLINT - data_(_cont.data()) {} + std::is_convertible().data())>::value>::type> + Span(const Container& _cont) : size_(_cont.size()), // NOLINT + data_(_cont.data()) { + static_assert(!detail::IsSpan::value, "Wrong constructor of Span is called."); + } template