| template <class T> struct static_abort {}; | |
| template <class E> | |
| struct any | |
| { | |
| const E& self() const { return static_cast<const E&>(*this); } | |
| }; | |
| struct range : public any<range> | |
| { | |
| range() {} | |
| template <class U> | |
| range(const U&) | |
| { | |
| typedef typename static_abort<U>::ret t; | |
| } | |
| }; | |
| int main() | |
| { | |
| const any<range>& r = *new range(); | |
| r.self(); | |
| } |