@@ -557,9 +557,11 @@ class UTFImpl<
557557public:
558558 // Handle ill-formed UTF-8
559559 U_FORCE_INLINE static CP32 sub () {
560- switch (behavior) {
561- case UTF_BEHAVIOR_NEGATIVE: return U_SENTINEL;
562- case UTF_BEHAVIOR_FFFD: return 0xfffd ;
560+ if constexpr (behavior == UTF_BEHAVIOR_NEGATIVE) {
561+ return U_SENTINEL;
562+ } else {
563+ static_assert (behavior == UTF_BEHAVIOR_FFFD);
564+ return 0xfffd ;
563565 }
564566 }
565567
@@ -736,10 +738,13 @@ class UTFImpl<
736738public:
737739 // Handle ill-formed UTF-16: One unpaired surrogate.
738740 U_FORCE_INLINE static CP32 sub (CP32 surrogate) {
739- switch (behavior) {
740- case UTF_BEHAVIOR_NEGATIVE: return U_SENTINEL;
741- case UTF_BEHAVIOR_FFFD: return 0xfffd ;
742- case UTF_BEHAVIOR_SURROGATE: return surrogate;
741+ if constexpr (behavior == UTF_BEHAVIOR_NEGATIVE) {
742+ return U_SENTINEL;
743+ } else if constexpr (behavior == UTF_BEHAVIOR_FFFD) {
744+ return 0xfffd ;
745+ } else {
746+ static_assert (behavior == UTF_BEHAVIOR_SURROGATE);
747+ return surrogate;
743748 }
744749 }
745750
@@ -822,10 +827,13 @@ class UTFImpl<
822827public:
823828 // Handle ill-formed UTF-32
824829 U_FORCE_INLINE static CP32 sub (bool forSurrogate, CP32 surrogate) {
825- switch (behavior) {
826- case UTF_BEHAVIOR_NEGATIVE: return U_SENTINEL;
827- case UTF_BEHAVIOR_FFFD: return 0xfffd ;
828- case UTF_BEHAVIOR_SURROGATE: return forSurrogate ? surrogate : 0xfffd ;
830+ if constexpr (behavior == UTF_BEHAVIOR_NEGATIVE) {
831+ return U_SENTINEL;
832+ } else if constexpr (behavior == UTF_BEHAVIOR_FFFD) {
833+ return 0xfffd ;
834+ } else {
835+ static_assert (behavior == UTF_BEHAVIOR_SURROGATE);
836+ return forSurrogate ? surrogate : 0xfffd ;
829837 }
830838 }
831839
0 commit comments