Another C++20 fix for GCC

This is a direct backport of commit 95d0d8e9e9d10da3cfa503fbba405e740aea3cc1
from Richard Smith:
    From: Richard Smith <richard@metafoo.co.uk>
    Date: Tue, 23 Feb 2021 14:07:13 -0800
    Subject: Fix constructor declarations that are invalid in C++20 onwards.

    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.

Bug: chromium:819294
Change-Id: I51a7f069d355d4932f4b50640fedbba1d5773f0b
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/71088
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@google.com>
Tested-by: Shahbaz Youssefi <syoussefi@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@google.com>
diff --git a/third_party/llvm-10.0/llvm/include/llvm/ADT/STLExtras.h b/third_party/llvm-10.0/llvm/include/llvm/ADT/STLExtras.h
index 620209b..d0a48e8 100644
--- a/third_party/llvm-10.0/llvm/include/llvm/ADT/STLExtras.h
+++ b/third_party/llvm-10.0/llvm/include/llvm/ADT/STLExtras.h
@@ -1415,9 +1415,9 @@
   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;
@@ -1451,22 +1451,22 @@
   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 different 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;
   }