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