type MyInt int; func Sum[T int | float64](a, b T) T { return a + b }; Sum[MyInt](1, 2)?Constraint int | float64 принимает только точные типы int и float64. Тип MyInt, определенный как type MyInt int, является отдельным именованным типом и не входит в этот union.
type MyInt int
// Не сработает:
func Sum[T int | float64](a, b T) T { return a + b }
Sum[MyInt](1, 2) // compile error: MyInt does not satisfy int | float64
// Правильно - с тильдой:
func Sum[T ~int | ~float64](a, b T) T { return a + b }
Sum[MyInt](1, 2) // OK: MyInt имеет underlying type int
Тильда ~T означает "тип T и все типы с underlying type T". Без тильды принимается только точный тип. Это важное различие при проектировании constraint-ов для библиотек.