/* { dg-do compile } */ /* { dg-options "-O2 -funswitch-loops" } */ struct __normal_iterator { typedef int*const *_Iterator; int*const * _M_current; __normal_iterator(const _Iterator& __i) : _M_current(__i){} const _Iterator& base() const {} }; struct string { ~string(){} }; struct vector { int** _M_finish; __normal_iterator end() const { return __normal_iterator (_M_finish); } int size() const { return end().base() - end().base(); } }; class Painter { int redraw_window(void); typedef int (Painter::* SliceWindowFunc)(void); int for_each(vector&, SliceWindowFunc); void tcl_command(void); }; inline int Painter::for_each(vector &layout, SliceWindowFunc func) { for (unsigned int window = 0; window < layout.size();++window) (this->*func)(); } int t; int Painter::redraw_window(void) {t = 1;} string t2(int); vector *g(const string&); void Painter::tcl_command(void) { for_each(*g(t2(2)), &Painter::redraw_window); }