http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53520
Bug #: 53520 Summary: ICE in timevar_start with -ftime-report and constexpr Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: pins...@gcc.gnu.org Short testcase: template<typename _Alloc> class allocator; template<typename _Alloc, typename _Tp> struct __alloctr_rebind_helper { template<typename, typename> static constexpr bool _S_chk(...) { return 0; } static const bool __value = _S_chk<_Alloc, _Tp>(nullptr); }; template<typename _Alloc, typename _Tp, bool = __alloctr_rebind_helper<_Alloc, _Tp>::__value> struct __alloctr_rebind; template<typename _Alloc> struct allocator_traits { template<typename _Tp> using rebind_alloc = typename __alloctr_rebind<_Alloc, _Tp>::__type; }; template<typename _Tp, typename _Alloc = allocator<_Tp> > class vector { typedef typename allocator_traits<_Alloc> ::template rebind_alloc<_Tp>::other _Tp_alloc_type; }; template <typename type> struct Data { static const vector <type >& values1 () { } }; void f() { typedef Data <int> value_data; range_begin (value_data::values1 ()); } --- CUT --- This was a valid program to begin with