enum Enum2<T0, T1> { case case0(T0) case case1(T1) } func just<T>(_ x: T) -> T { return x } func just<T>(_ x: Never) -> T { fatalError() } func foo(x: Enum2<Int, Never>) -> Int { switch x { case .case0(let x): return just(x) case .case1(let x): return just(x) } }