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