The following code causes an assert on a recent svn g++, with -std=c++0x. On g++ 4.4 it produces an error. I believe the code to be valid, but am not 100% positive.
#include <vector> struct Range { int lb; int ub; Range(int i, int j) : lb(i), ub(j) {} Range(const Range& r) = default; Range() = default; }; template<class T> T deref(const T& t) { return t; } template <class T, template <typename T, typename...> class Cont, class... Args> auto deref(const Cont<T>& u, int i, Args... args) -> decltype(deref(u[i], args...)) { deref(u[i], args...); } template <class T, template <typename T, typename...> class Cont, class... Args> auto deref(const Cont<T>& u, Range r, Args... args) -> Cont<decltype(deref(u[0], args...))> { typedef decltype(deref(u[0], args...)) member; Cont<member> retval; for(int i = r.lb; i <= r.ub; ++i) { retval.push_back(deref(u[i], args...)); } return retval; } int main(void) { std::vector<std::vector<std::vector<int>>> v; int i = deref(v, 1,2,3); std::vector<int> j = deref(v, 1, Range(1,2), 3); } -- Summary: Internal error on C++0x code Product: gcc Version: 4.5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: chris at bubblescope dot net http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43382