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(); | |
} |