------- Comment #11 from piotr dot wyderski at gmail dot com 2009-12-21 17:38 ------- An even more reduced testcase which ICEs. Delta is amazing... I think I'll stop here.
// ------------------------8<---------------- namespace std class tuple<> { }; template<std::size_t __i, typename... _Elements> get(tuple<_Elements...>& __t) { } template <class _OutputIterator, class _Tp> class unique_ptr { }; template<typename _Tp, typename _Tp_Deleter> class unique_ptr<_Tp[], _Tp_Deleter> { typedef std::tuple<_Tp*, _Tp_Deleter> __tuple_type; get() const { return std::get<0>(_M_t); } __tuple_type _M_t; }; namespace base { struct release_deleter { }; template <typename T> class dynamic_dispatch; template < typename TC, typename TR, typename TD, typename... TA > class dynamic_dispatch<TR (TC::*)(TD&, TA...)> { struct entry { }; typedef std::unique_ptr<entry[], release_deleter> entry_ptr; entry_ptr m_Start; template <typename UC, typename UD> void attach_handler(TR (UC::*m)(UD&, TA...)); }; template < typename TC, typename TR, typename TD, typename... TA > template < typename UC, typename UD > void dynamic_dispatch<TR (TC::*)(TD&, TA...)>::attach_handler(TR (UC::*m)(UD&, TA...)) { entry* p = m_Cursor; if (p != m_Start.get()) { } while(--p != m_Start.get()); } class __attribute__((dllexport)) request { }; template <std::size_t N_CHID> class read_request : public read_request_base { }; template <typename TC> class request_dispatcher : private base::dynamic_dispatch<void (TC::*)(request&)> { request_dispatcher(); }; class __attribute__((dllexport)) file_reader : public physical_device { void execute_command(read_request<0>& req); }; template <> request_dispatcher<file_reader>::request_dispatcher() : super(&file_reader::report_unsupported_request) { attach_handler(&file_reader::execute_command); -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42447