template struct T { typedef int result; }; template struct X { typedef typename T::result result; }; template class new_alloc { public: void deallocate (int* p, int /*num*/) { T::operator delete((void *)p); } }; void test(void) { return x != 0 && x >= 1 && x < 2 && y >= 3 && y < 4; }