[llvm] 95d0d8e - Fix constructor declarations that are invalid in C++20 onwards.
Richard Smith via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 25 14:25:14 PST 2021
Author: Richard Smith
Date: 2021-02-25T14:25:01-08:00
New Revision: 95d0d8e9e9d10da3cfa503fbba405e740aea3cc1
URL: https://github.com/llvm/llvm-project/commit/95d0d8e9e9d10da3cfa503fbba405e740aea3cc1
DIFF: https://github.com/llvm/llvm-project/commit/95d0d8e9e9d10da3cfa503fbba405e740aea3cc1.diff
LOG: Fix constructor declarations that are invalid in C++20 onwards.
Under C++ CWG DR 2237, the constructor for a class template C must be
written as 'C(...)' not as 'C<T>(...)'. This fixes a build failure with
GCC in C++20 mode.
In passing, remove some other redundant '<T>' qualification from the
affected classes.
Added:
Modified:
llvm/include/llvm/ADT/STLExtras.h
Removed:
################################################################################
diff --git a/llvm/include/llvm/ADT/STLExtras.h b/llvm/include/llvm/ADT/STLExtras.h
index 63c7f48a5bd2..7741edf04959 100644
--- a/llvm/include/llvm/ADT/STLExtras.h
+++ b/llvm/include/llvm/ADT/STLExtras.h
@@ -1820,9 +1820,9 @@ template <typename R> struct result_pair {
result_pair(std::size_t Index, IterOfRange<R> Iter)
: Index(Index), Iter(Iter) {}
- result_pair<R>(const result_pair<R> &Other)
+ result_pair(const result_pair<R> &Other)
: Index(Other.Index), Iter(Other.Iter) {}
- result_pair<R> &operator=(const result_pair<R> &Other) {
+ result_pair &operator=(const result_pair &Other) {
Index = Other.Index;
Iter = Other.Iter;
return *this;
@@ -1856,22 +1856,22 @@ class enumerator_iter
result_type &operator*() { return Result; }
const result_type &operator*() const { return Result; }
- enumerator_iter<R> &operator++() {
+ enumerator_iter &operator++() {
assert(Result.Index != std::numeric_limits<size_t>::max());
++Result.Iter;
++Result.Index;
return *this;
}
- bool operator==(const enumerator_iter<R> &RHS) const {
+ bool operator==(const enumerator_iter &RHS) const {
// Don't compare indices here, only iterators. It's possible for an end
// iterator to have
diff erent indices depending on whether it was created
// by calling std::end() versus incrementing a valid iterator.
return Result.Iter == RHS.Result.Iter;
}
- enumerator_iter<R>(const enumerator_iter<R> &Other) : Result(Other.Result) {}
- enumerator_iter<R> &operator=(const enumerator_iter<R> &Other) {
+ enumerator_iter(const enumerator_iter &Other) : Result(Other.Result) {}
+ enumerator_iter &operator=(const enumerator_iter &Other) {
Result = Other.Result;
return *this;
}
More information about the llvm-commits
mailing list