Convert to C++20 requires clauses in //core/fpdfapi
Easier to read than SFINAE.
Change-Id: Ice71c1274295ff78ad782f920c6066e21befac4a
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/131175
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/parser/cpdf_array.h b/core/fpdfapi/parser/cpdf_array.h
index 5fd98af..473588d 100644
--- a/core/fpdfapi/parser/cpdf_array.h
+++ b/core/fpdfapi/parser/cpdf_array.h
@@ -81,8 +81,8 @@
// to Append()/SetAt()/InsertAt() since by creating a new object with no
// previous references, they ensure cycles can not be introduced.
template <typename T, typename... Args>
- typename std::enable_if<!CanInternStrings<T>::value, RetainPtr<T>>::type
- AppendNew(Args&&... args) {
+ requires(!CanInternStrings<T>::value)
+ RetainPtr<T> AppendNew(Args&&... args) {
static_assert(!std::is_same<T, CPDF_Stream>::value,
"Cannot append a CPDF_Stream directly. Add it indirectly as "
"a `CPDF_Reference` instead.");
@@ -90,14 +90,14 @@
AppendInternal(pdfium::MakeRetain<T>(std::forward<Args>(args)...))));
}
template <typename T, typename... Args>
- typename std::enable_if<CanInternStrings<T>::value, RetainPtr<T>>::type
- AppendNew(Args&&... args) {
+ requires(CanInternStrings<T>::value)
+ RetainPtr<T> AppendNew(Args&&... args) {
return pdfium::WrapRetain(static_cast<T*>(AppendInternal(
pdfium::MakeRetain<T>(pool_, std::forward<Args>(args)...))));
}
template <typename T, typename... Args>
- typename std::enable_if<!CanInternStrings<T>::value, RetainPtr<T>>::type
- SetNewAt(size_t index, Args&&... args) {
+ requires(!CanInternStrings<T>::value)
+ RetainPtr<T> SetNewAt(size_t index, Args&&... args) {
static_assert(!std::is_same<T, CPDF_Stream>::value,
"Cannot set a CPDF_Stream directly. Add it indirectly as a "
"`CPDF_Reference` instead.");
@@ -105,14 +105,14 @@
index, pdfium::MakeRetain<T>(std::forward<Args>(args)...))));
}
template <typename T, typename... Args>
- typename std::enable_if<CanInternStrings<T>::value, RetainPtr<T>>::type
- SetNewAt(size_t index, Args&&... args) {
+ requires(CanInternStrings<T>::value)
+ RetainPtr<T> SetNewAt(size_t index, Args&&... args) {
return pdfium::WrapRetain(static_cast<T*>(SetAtInternal(
index, pdfium::MakeRetain<T>(pool_, std::forward<Args>(args)...))));
}
template <typename T, typename... Args>
- typename std::enable_if<!CanInternStrings<T>::value, RetainPtr<T>>::type
- InsertNewAt(size_t index, Args&&... args) {
+ requires(!CanInternStrings<T>::value)
+ RetainPtr<T> InsertNewAt(size_t index, Args&&... args) {
static_assert(!std::is_same<T, CPDF_Stream>::value,
"Cannot insert a CPDF_Stream directly. Add it indirectly as "
"a `CPDF_Reference` instead.");
@@ -120,8 +120,8 @@
index, pdfium::MakeRetain<T>(std::forward<Args>(args)...))));
}
template <typename T, typename... Args>
- typename std::enable_if<CanInternStrings<T>::value, RetainPtr<T>>::type
- InsertNewAt(size_t index, Args&&... args) {
+ requires(CanInternStrings<T>::value)
+ RetainPtr<T> InsertNewAt(size_t index, Args&&... args) {
return pdfium::WrapRetain(static_cast<T*>(InsertAtInternal(
index, pdfium::MakeRetain<T>(pool_, std::forward<Args>(args)...))));
}
diff --git a/core/fpdfapi/parser/cpdf_dictionary.h b/core/fpdfapi/parser/cpdf_dictionary.h
index 73f590a..6688f7a 100644
--- a/core/fpdfapi/parser/cpdf_dictionary.h
+++ b/core/fpdfapi/parser/cpdf_dictionary.h
@@ -88,8 +88,8 @@
// a new object with no previous references, they ensure cycles can not be
// introduced.
template <typename T, typename... Args>
- typename std::enable_if<!CanInternStrings<T>::value, RetainPtr<T>>::type
- SetNewFor(const ByteString& key, Args&&... args) {
+ requires(!CanInternStrings<T>::value)
+ RetainPtr<T> SetNewFor(const ByteString& key, Args&&... args) {
static_assert(!std::is_same<T, CPDF_Stream>::value,
"Cannot set a CPDF_Stream directly. Add it indirectly as a "
"`CPDF_Reference` instead.");
@@ -97,8 +97,8 @@
key, pdfium::MakeRetain<T>(std::forward<Args>(args)...))));
}
template <typename T, typename... Args>
- typename std::enable_if<CanInternStrings<T>::value, RetainPtr<T>>::type
- SetNewFor(const ByteString& key, Args&&... args) {
+ requires(CanInternStrings<T>::value)
+ RetainPtr<T> SetNewFor(const ByteString& key, Args&&... args) {
return pdfium::WrapRetain(static_cast<T*>(SetForInternal(
key, pdfium::MakeRetain<T>(pool_, std::forward<Args>(args)...))));
}
diff --git a/core/fpdfapi/parser/cpdf_indirect_object_holder.h b/core/fpdfapi/parser/cpdf_indirect_object_holder.h
index a5d973c..46b9a7b 100644
--- a/core/fpdfapi/parser/cpdf_indirect_object_holder.h
+++ b/core/fpdfapi/parser/cpdf_indirect_object_holder.h
@@ -44,14 +44,14 @@
// but which can intern strings from it. We have a special cast to handle
// objects that can intern strings from our ByteStringPool.
template <typename T, typename... Args>
- typename std::enable_if<CanInternStrings<T>::value, RetainPtr<T>>::type New(
- Args&&... args) {
+ requires(CanInternStrings<T>::value)
+ RetainPtr<T> New(Args&&... args) {
return pdfium::MakeRetain<T>(byte_string_pool_,
std::forward<Args>(args)...);
}
template <typename T, typename... Args>
- typename std::enable_if<!CanInternStrings<T>::value, RetainPtr<T>>::type New(
- Args&&... args) {
+ requires(!CanInternStrings<T>::value)
+ RetainPtr<T> New(Args&&... args) {
return pdfium::MakeRetain<T>(std::forward<Args>(args)...);
}