| // PR c++/42447 |
| |
| template<int> |
| void* get(int); |
| |
| template<typename> |
| struct unique_ptr; |
| |
| template<typename _Tp> |
| struct unique_ptr<_Tp[]> |
| { |
| typedef int __tuple_type; |
| |
| void* |
| get() const |
| { return ::get<0>(_M_t); } |
| |
| __tuple_type _M_t; |
| }; |
| |
| template <typename T> class dynamic_dispatch; |
| |
| template <typename TC> |
| struct dynamic_dispatch<void (TC::*)(int&)> |
| { |
| struct entry { }; |
| unique_ptr<entry[]> m_Start; |
| |
| template <typename UC> |
| void attach_handler(void (UC::*m)(int&)) |
| { |
| entry* p = 0; |
| do { |
| } while(--p != m_Start.get()); |
| } |
| }; |
| |
| template <typename TC> |
| class request_dispatcher |
| : private dynamic_dispatch<void (TC::*)(int&)> |
| { request_dispatcher(); }; |
| |
| struct file_reader |
| { |
| void execute_command(int&); |
| }; |
| |
| template <> |
| request_dispatcher<file_reader>::request_dispatcher() |
| { this->attach_handler(&file_reader::execute_command); } |