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