we just reject now but it is valid code as far as I can tell: template< class other> struct bin_search_tree_data_ { typedef typename other::node node; typedef node *node_pointer; ~bin_search_tree_data_() { m_p_head->~node(); } node_pointer m_p_head; }; struct blowup { typedef int node; }; bin_search_tree_data_< blowup > r; ------------------------------ Here is one that ICEs also and closer to the original code: template< class other> struct bin_search_tree_data_ { typedef typename other::node node; typedef node *node_pointer; ~bin_search_tree_data_() { m_p_head->~node(); } node_pointer m_p_head; }; struct blowup2{}; struct blowup { typedef blowup2 node; }; bin_search_tree_data_< blowup > r; ------ I am creating this after 15 hours of no activity on fixing the problem.
Note this was from: http://gcc.gnu.org/ml/gcc/2006-09/msg00048.html
I'll look at this tomorrow. If I can't figure out a solution I'll revert 23287
Fixed.