Skip to content

Commit

Permalink
Fixing a SFINAE issue
Browse files Browse the repository at this point in the history
  • Loading branch information
ddemidov committed Nov 13, 2018
1 parent 8d8699b commit 1dff8b2
Showing 1 changed file with 14 additions and 6 deletions.
20 changes: 14 additions & 6 deletions amgcl/mpi/util.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,17 +96,25 @@ struct datatype_impl<unsigned long long> {
static MPI_Datatype get() { return MPI_UNSIGNED_LONG_LONG; }
};

template <>
struct datatype_impl<ptrdiff_t,
typename std::enable_if<!std::is_same<ptrdiff_t, long long>::value && !std::is_same<ptrdiff_t, int>::value>::type
template <typename T>
struct datatype_impl<T,
typename std::enable_if<
std::is_same<T, ptrdiff_t>::value &&
!std::is_same<ptrdiff_t, long long>::value &&
!std::is_same<ptrdiff_t, int>::value
>::type
> : std::conditional<
sizeof(ptrdiff_t) == sizeof(int), datatype_impl<int>, datatype_impl<long long>
>::type
{};

template <>
struct datatype_impl<size_t,
typename std::enable_if<!std::is_same<size_t, unsigned long long>::value && !std::is_same<ptrdiff_t, unsigned int>::value>::type
template <typename T>
struct datatype_impl<T,
typename std::enable_if<
std::is_same<T, size_t>::value &&
!std::is_same<size_t, unsigned long long>::value &&
!std::is_same<ptrdiff_t, unsigned int>::value
>::type
>
: std::conditional<
sizeof(size_t) == sizeof(unsigned), datatype_impl<unsigned>, datatype_impl<unsigned long long>
Expand Down

0 comments on commit 1dff8b2

Please sign in to comment.