From: Francisco Jerez Date: Wed, 30 Oct 2013 18:11:06 +0000 (-0700) Subject: clover: Workaround compiler bug present in GCC 4.7.0-4.7.2. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6e9206bdccda628682204fa0b35b2bf698d64295;p=mesa.git 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. --- diff --git a/src/gallium/state_trackers/clover/util/range.hpp b/src/gallium/state_trackers/clover/util/range.hpp index 151992ed8f4..cefa5b5ad17 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 using preferred_iterator_type = decltype(std::declval().begin()); - - template - using adaptor_iterator = detail::iterator_adaptor< - F, preferred_iterator_type...>; - - template - using adaptor_const_iterator = detail::iterator_adaptor< - F, preferred_iterator_type...>; } /// @@ -236,12 +228,17 @@ namespace clover { template class adaptor_range : public detail::basic_range, - detail::adaptor_iterator, - detail::adaptor_const_iterator> { + detail::iterator_adaptor< + F, detail::preferred_iterator_type...>, + detail::iterator_adaptor< + F, detail::preferred_iterator_type...> + > { public: typedef detail::basic_range, - detail::adaptor_iterator, - detail::adaptor_const_iterator + detail::iterator_adaptor< + F, detail::preferred_iterator_type...>, + detail::iterator_adaptor< + F, detail::preferred_iterator_type...> > super; template @@ -254,23 +251,23 @@ namespace clover { return f == r.f && os == r.os; } - detail::adaptor_iterator + typename super::iterator begin() { return { f, tuple::map(begins(), os) }; } - detail::adaptor_iterator + typename super::iterator end() { return { f, tuple::map(advances_by(size()), tuple::map(begins(), os)) }; } - detail::adaptor_const_iterator + typename super::const_iterator begin() const { return { f, tuple::map(begins(), os) }; } - detail::adaptor_const_iterator + typename super::const_iterator end() const { return { f, tuple::map(ends(), os) }; }