| // { dg-do assemble } |
| // { dg-options "-O3" } |
| // Origin: Mark Mitchell <mark@codesourcery.com> |
| |
| class ostream; |
| |
| struct S |
| { |
| virtual void print(ostream&) const = 0; |
| }; |
| |
| template <class _Tp> |
| class vector |
| { |
| public: |
| _Tp& operator[](unsigned __n) const { return *(_M_start + __n); } |
| _Tp* _M_start; |
| }; |
| |
| class T |
| { |
| public: |
| |
| void print(ostream&) const; |
| |
| vector<S*> bcList_m; |
| }; |
| |
| void T::print(ostream& o) const |
| { |
| int n = 3; |
| |
| for (int i = 0; i < n; ++i) |
| bcList_m[i]->print(o); |
| return; |
| } |
| |
| ostream& |
| operator<<(ostream& o, const T& bcList) |
| { |
| bcList.print(o); |
| return o; |
| } |
| |
| |
| |
| |
| |
| |
| |
| |