// RUN: %llvmgxx -c -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); } }