         set(t){ (re, im) = t }
     }
     /// converts to Complex<Int>
-    public var asComplexInt:Complex<Int> {
-        return Complex<Int>(Int(re)!, Int(im)!)
-    }
+    public var asComplexInt:Complex<Int>        { return Complex<Int>(self) }
     /// converts to Complex<Double>
-    public var asComplexDouble:Complex<Double> {
-        return Complex<Double>(Double(re)!, Double(im)!)
-    }
+    public var asComplexDouble:Complex<Double>  { return Complex<Double>(self) }
     /// converts to Complex<Float>
-    public var asComplexFloat:Complex<Float> {
-        return Complex<Float>(Float(re)!, Float(im)!)
-    }
+    public var asComplexFloat:Complex<Float>    { return Complex<Float>(self) }
 }
 /// real part of z
 public func real<T>(z:Complex<T>) -> T { return z.re }

    public init(_ p:CGPoint) {
        self.init(T(p.x)!, T(p.y)!)
    }
    /// converts to CGPoint(x:re, y:im)
    public var asCGPoint:CGPoint {
        return CGPoint(x:CGFloat(re)!, y:CGFloat(im)!)
    }
    /// converts to Complex<Float>
    public var asComplexCGFloat:Complex<CGFloat> {
        return Complex<CGFloat>(CGFloat(re)!, CGFloat(im)!)
    }
}
public typealias ComplexCGFloat = Complex<CGFloat>
#endif

    public init?<U:ArithmeticType>(_ x:U) {
        switch x {
        case let s as Self:     self.init(s)
        case let d as Double:   self.init(d)
        case let f as Float:    self.init(f)
        case let i as Int:      self.init(i)
        default:
            return nil
        }
