diff --git a/tree/treeplayer/inc/TTreeReaderArray.h b/tree/treeplayer/inc/TTreeReaderArray.h
index ddd2cfeccf154302dd082cf20129536e04e2bd8d..e017110d43a2e2ff9a8ee69e5c9fb0685dff39a2 100644
--- a/tree/treeplayer/inc/TTreeReaderArray.h
+++ b/tree/treeplayer/inc/TTreeReaderArray.h
@@ -154,6 +154,7 @@ public:
       }
 
       Iterator_t operator+(std::ptrdiff_t n) const { return Iterator_t(fIndex + n, fArray); }
+      friend auto operator+(std::ptrdiff_t n, const Iterator_t &it) -> decltype(it + n) { return it + n; }
 
       Iterator_t operator-(std::ptrdiff_t n) const
       {
@@ -207,11 +208,4 @@ protected:
    // ClassDefT(TTreeReaderArray, 0);//Accessor to member of an object stored in a collection
 };
 
-// FIXME: `n + it` cannot use this overload of operator+ because T cannot be deduced from the type of the iterator
-template <typename T>
-auto operator+(std::ptrdiff_t n, const typename TTreeReaderArray<T>::iterator &it) -> decltype(it + n)
-{
-   return it + n;
-}
-
 #endif // ROOT_TTreeReaderArray
diff --git a/tree/treeplayer/test/readerarray_iterator.cxx b/tree/treeplayer/test/readerarray_iterator.cxx
index 4ea5999e5e618513013d89c0e7c29214c1152366..82d83c2f2af70cd8bba5e534de58f2dd2499061c 100644
--- a/tree/treeplayer/test/readerarray_iterator.cxx
+++ b/tree/treeplayer/test/readerarray_iterator.cxx
@@ -64,9 +64,7 @@ void TestReaderArray()
    it = it3++;
    EXPECT_EQ(it += 1, it3);
 
-   // FIXME: `n + it` does not resolve to the right operator+
-   // EXPECT_EQ((std::ptrdiff_t(2) + arr.begin()) - 1, --(arr.begin() + 2));
-   EXPECT_EQ((arr.begin() + 2) - 1, --(arr.begin() + 2));
+   EXPECT_EQ((std::ptrdiff_t(2) + arr.begin()) - 1, --(arr.begin() + 2));
    it = std::move(it3);
    auto it4 = it--;
    EXPECT_EQ(it4 -= 1, it);