------- Comment #12 from paolo dot carlini at oracle dot com 2009-12-21 18:33 ------- Ok, thanks. From your work I produced the below, which doesn't use any C++0x feature and to me looks like a 4.5 Regression.
/////////////////// template<typename _Tp, typename _Up> struct tuple { }; template<int __i, typename _Tp, typename _Up> void* get(const tuple<_Tp, _Up>&); template <typename _Tp, typename _Tp_Deleter = void> struct unique_ptr; template<typename _Tp, typename _Tp_Deleter> struct unique_ptr<_Tp[], _Tp_Deleter> { typedef tuple<_Tp*, _Tp_Deleter> __tuple_type; void* get() const { return ::get<0>(_M_t); } __tuple_type _M_t; }; struct release_deleter; template <typename T> class dynamic_dispatch; template <typename TC, typename TR, typename TD> struct dynamic_dispatch<TR (TC::*)(TD&)> { struct entry { }; typedef unique_ptr<entry[], release_deleter> entry_ptr; entry_ptr m_Start; template <typename UC, typename UD> void attach_handler(TR (UC::*m)(UD&)) { entry* p = 0; if (p != m_Start.get()) { } while(--p != m_Start.get()); } }; struct request; struct read_request; template <typename TC> class request_dispatcher : private dynamic_dispatch<void (TC::*)(request&)> { request_dispatcher(); }; struct file_reader { void execute_command(read_request&); }; template <> request_dispatcher<file_reader>::request_dispatcher() { attach_handler(&file_reader::execute_command); } -- paolo dot carlini at oracle dot com changed: What |Removed |Added ---------------------------------------------------------------------------- CC|piotr dot wyderski at gmail |jason at gcc dot gnu dot org |dot com | Known to fail| |4.5.0 Known to work| |4.4.1 Priority|P3 |P1 Summary|[C++0x] ICE during |[4.5 Regresson] ICE during |processing complex templates|processing complex templates Target Milestone|--- |4.5.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42447