Mesa (master): clover: Workaround compiler bug present in GCC 4.7.0-4.7.2.

Francisco Jerez currojerez at kemper.freedesktop.org
Mon Nov 4 20:15:08 UTC 2013


Module: Mesa
Branch: master
Commit: 6e9206bdccda628682204fa0b35b2bf698d64295
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=6e9206bdccda628682204fa0b35b2bf698d64295

Author: Francisco Jerez <currojerez at riseup.net>
Date:   Wed Oct 30 11:11:06 2013 -0700

clover: Workaround compiler bug present in GCC 4.7.0-4.7.2.

Variadic template aliases make these versions of GCC very confused,
write down the full type spec instead.

---

 src/gallium/state_trackers/clover/util/range.hpp |   29 ++++++++++------------
 1 files changed, 13 insertions(+), 16 deletions(-)

diff --git a/src/gallium/state_trackers/clover/util/range.hpp b/src/gallium/state_trackers/clover/util/range.hpp
index 151992e..cefa5b5 100644
--- a/src/gallium/state_trackers/clover/util/range.hpp
+++ b/src/gallium/state_trackers/clover/util/range.hpp
@@ -218,14 +218,6 @@ namespace clover {
    namespace detail {
       template<typename T>
       using preferred_iterator_type = decltype(std::declval<T>().begin());
-
-      template<typename F, typename... Os>
-      using adaptor_iterator = detail::iterator_adaptor<
-         F, preferred_iterator_type<Os>...>;
-
-      template<typename F, typename... Os>
-      using adaptor_const_iterator = detail::iterator_adaptor<
-         F, preferred_iterator_type<const Os>...>;
    }
 
    ///
@@ -236,12 +228,17 @@ namespace clover {
    template<typename F, typename... Os>
    class adaptor_range :
       public detail::basic_range<adaptor_range<F, Os...>,
-                                 detail::adaptor_iterator<F, Os...>,
-                                 detail::adaptor_const_iterator<F, Os...>> {
+                                 detail::iterator_adaptor<
+                                    F, detail::preferred_iterator_type<Os>...>,
+                                 detail::iterator_adaptor<
+                                    F, detail::preferred_iterator_type<const Os>...>
+                                 > {
    public:
       typedef detail::basic_range<adaptor_range<F, Os...>,
-                                  detail::adaptor_iterator<F, Os...>,
-                                  detail::adaptor_const_iterator<F, Os...>
+                                  detail::iterator_adaptor<
+                                     F, detail::preferred_iterator_type<Os>...>,
+                                  detail::iterator_adaptor<
+                                     F, detail::preferred_iterator_type<const Os>...>
                                   > super;
 
       template<typename G, typename... Rs>
@@ -254,23 +251,23 @@ namespace clover {
          return f == r.f && os == r.os;
       }
 
-      detail::adaptor_iterator<F, Os...>
+      typename super::iterator
       begin() {
          return { f, tuple::map(begins(), os) };
       }
 
-      detail::adaptor_iterator<F, Os...>
+      typename super::iterator
       end() {
          return { f, tuple::map(advances_by(size()),
                                 tuple::map(begins(), os)) };
       }
 
-      detail::adaptor_const_iterator<F, Os...>
+      typename super::const_iterator
       begin() const {
          return { f, tuple::map(begins(), os) };
       }
 
-      detail::adaptor_const_iterator<F, Os...>
+      typename super::const_iterator
       end() const {
          return { f, tuple::map(ends(), os) };
       }




More information about the mesa-commit mailing list