| // RUN: %clang_cc1 -emit-llvm %s -o - |
| // PR1634 |
| |
| namespace Manta |
| { |
| class CallbackHandle |
| { |
| protected:virtual ~ CallbackHandle (void) |
| { |
| } |
| }; |
| template < typename Data1 > class CallbackBase_1Data:public CallbackHandle |
| { |
| }; |
| } |
| |
| namespace __gnu_cxx |
| { |
| template < typename _Iterator, typename _Container > |
| class __normal_iterator |
| { |
| _Iterator _M_current; |
| }; |
| } |
| |
| namespace std |
| { |
| template < typename _Tp > struct allocator |
| { |
| typedef _Tp *pointer; |
| }; |
| template < typename _InputIterator, |
| typename _Tp > inline void find (_InputIterator __last, |
| const _Tp & __val) |
| { |
| }; |
| } |
| |
| namespace Manta |
| { |
| template < typename _Tp, typename _Alloc> struct _Vector_base |
| { |
| struct _Vector_impl |
| { |
| _Tp *_M_start; |
| }; |
| public: |
| _Vector_impl _M_impl; |
| }; |
| template < typename _Tp, typename _Alloc = std::allocator < _Tp > > |
| class vector:protected _Vector_base < _Tp,_Alloc > |
| { |
| public: |
| typedef __gnu_cxx::__normal_iterator < typename _Alloc::pointer, |
| vector < _Tp, _Alloc > > iterator; |
| iterator end () |
| { |
| } |
| }; |
| class MantaInterface |
| { |
| }; |
| class RTRT |
| { |
| virtual CallbackHandle *registerTerminationCallback (CallbackBase_1Data < |
| MantaInterface * >*); |
| virtual void unregisterCallback (CallbackHandle *); |
| typedef vector < CallbackBase_1Data < int >*>PRCallbackMapType; |
| PRCallbackMapType parallelPreRenderCallbacks; |
| }; |
| } |
| using namespace Manta; |
| CallbackHandle * |
| RTRT::registerTerminationCallback (CallbackBase_1Data < MantaInterface * >*cb) |
| { |
| return cb; |
| } |
| |
| void |
| RTRT::unregisterCallback (CallbackHandle * callback) |
| { |
| { |
| typedef CallbackBase_1Data < int > callback_t; |
| callback_t *cb = static_cast < callback_t * >(callback); |
| find (parallelPreRenderCallbacks.end (), cb); |
| } |
| } |