------- 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