diff --git a/src/MemoryX.h b/src/MemoryX.h index 7d1dba325..529b31d11 100644 --- a/src/MemoryX.h +++ b/src/MemoryX.h @@ -727,4 +727,16 @@ Final_action finally (F f) return Final_action(f); } +/* + * A convenience for use with range-for + */ +template +struct IteratorRange : public std::pair { + IteratorRange (Iterator &&a, Iterator &&b) + : std::pair { std::move(a), std::move(b) } {} + + Iterator begin() const { return this->first; } + Iterator end() const { return this->second; } +}; + #endif // __AUDACITY_MEMORY_X_H__ diff --git a/src/Tags.cpp b/src/Tags.cpp index 756ee6b6c..6c085555a 100644 --- a/src/Tags.cpp +++ b/src/Tags.cpp @@ -443,7 +443,7 @@ wxString Tags::GetTag(const wxString & name) const Tags::Iterators Tags::GetRange() const { - return std::make_pair(mMap.begin(), mMap.end()); + return { mMap.begin(), mMap.end() }; } void Tags::SetTag(const wxString & name, const wxString & value) diff --git a/src/Tags.h b/src/Tags.h index 4fec7a850..dd7d029dc 100644 --- a/src/Tags.h +++ b/src/Tags.h @@ -104,13 +104,7 @@ class AUDACITY_DLL_API Tags final : public XMLTagHandler { bool HasTag(const wxString & name) const; wxString GetTag(const wxString & name) const; - using IterPair = std::pair; - struct Iterators : public IterPair { - Iterators(IterPair p) : IterPair(p) {} - // Define begin() and end() for convenience in range-for - auto begin() -> decltype(first) const { return first; } - auto end() -> decltype(second) const { return second; } - }; + using Iterators = IteratorRange; Iterators GetRange() const; void SetTag(const wxString & name, const wxString & value);