Use std::enable_if instead of a custom helper class.
Change-Id: Iffa0f0350ccc4fce698b9a16aefd340e16654076
diff --git a/compiler/utils/array_ref.h b/compiler/utils/array_ref.h
index 5a68874..2d70b7d 100644
--- a/compiler/utils/array_ref.h
+++ b/compiler/utils/array_ref.h
@@ -24,8 +24,6 @@
namespace art {
-template <typename T, bool ok> struct ArrayRefHelper;
-
/**
* @brief A container that references an array.
*
@@ -41,6 +39,9 @@
*/
template <typename T>
class ArrayRef {
+ private:
+ struct tag { };
+
public:
typedef T value_type;
typedef T& reference;
@@ -67,7 +68,7 @@
template <typename U, size_t size>
constexpr ArrayRef(U (&array)[size],
- typename ArrayRefHelper<T, std::is_same<T, const U>::value>::tag t = tag())
+ typename std::enable_if<std::is_same<T, const U>::value, tag>::type t = tag())
: array_(array), size_(size) {
}
@@ -77,7 +78,7 @@
template <typename U>
constexpr ArrayRef(U* array, size_t size,
- typename ArrayRefHelper<T, std::is_same<T, const U>::value>::tag t = tag())
+ typename std::enable_if<std::is_same<T, const U>::value, tag>::type t = tag())
: array_(array), size_(size) {
}
@@ -87,7 +88,7 @@
template <typename U>
ArrayRef(const std::vector<U>& v,
- typename ArrayRefHelper<T, std::is_same<T, const U>::value>::tag t = tag())
+ typename std::enable_if<std::is_same<T, const U>::value, tag>::tag t = tag())
: array_(v.data()), size_(v.size()) {
}
@@ -100,7 +101,7 @@
}
template <typename U>
- typename ArrayRefHelper<T, std::is_same<T, const U>::value>::type&
+ typename std::enable_if<std::is_same<T, const U>::value, ArrayRef>::type&
operator=(const ArrayRef<U>& other) {
return *this = ArrayRef(other);
}
@@ -162,22 +163,10 @@
const value_type* data() const { return array_; }
private:
- struct tag { };
- friend struct ArrayRefHelper<T, true>;
-
T* array_;
size_t size_;
};
-template <typename T> struct ArrayRefHelper<T, true> {
- typedef typename ArrayRef<T>::tag tag;
- typedef ArrayRef<T> type;
-};
-
-template <typename T> struct ArrayRefHelper<T, false> {
- // SFINAE: No "tag" or "type" typedef.
-};
-
} // namespace art