derving enum, bounded