1template <class T> struct static_abort {}; 2 3template <class E> 4struct any 5{ 6 const E& self() const { return static_cast<const E&>(*this); } 7}; 8 9struct range : public any<range> 10{ 11 range() {} 12 13 template <class U> 14 range(const U&) 15 { 16 typedef typename static_abort<U>::ret t; 17 } 18}; 19 20int main() 21{ 22 const any<range>& r = *new range(); 23 r.self(); 24} 25