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);