default should be assert(0);