Fix span constructor. (#5166)

* Make sure copy constructor is used.
This commit is contained in:
Jiaming Yuan 2020-01-07 11:19:38 +08:00 committed by GitHub
parent ebc86a3afa
commit 77cfbff5a7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -422,24 +422,27 @@ class Span {
template <class Container,
class = typename std::enable_if<
!std::is_const<element_type>::value && !detail::IsSpan<Container>::value &&
!std::is_const<element_type>::value &&
!detail::IsSpan<Container>::value &&
std::is_convertible<typename Container::pointer, pointer>::value &&
std::is_convertible<typename Container::pointer,
pointer>::value &&
std::is_convertible<
typename Container::pointer,
decltype(std::declval<Container>().data())>::value>>
XGBOOST_DEVICE Span(Container& _cont) : // NOLINT
size_(_cont.size()), data_(_cont.data()) {}
decltype(std::declval<Container>().data())>::value>::type>
Span(Container& _cont) : // NOLINT
size_(_cont.size()), data_(_cont.data()) {
static_assert(!detail::IsSpan<Container>::value, "Wrong constructor of Span is called.");
}
template <class Container,
class = typename std::enable_if<
std::is_const<element_type>::value && !detail::IsSpan<Container>::value &&
std::is_const<element_type>::value &&
!detail::IsSpan<Container>::value &&
std::is_convertible<typename Container::pointer, pointer>::value &&
std::is_convertible<
typename Container::pointer,
decltype(std::declval<Container>().data())>::value>>
XGBOOST_DEVICE Span(const Container& _cont) : size_(_cont.size()), // NOLINT
data_(_cont.data()) {}
std::is_convertible<typename Container::pointer,
decltype(std::declval<Container>().data())>::value>::type>
Span(const Container& _cont) : size_(_cont.size()), // NOLINT
data_(_cont.data()) {
static_assert(!detail::IsSpan<Container>::value, "Wrong constructor of Span is called.");
}
template <class U, std::size_t OtherExtent,
class = typename std::enable_if<