I think this should be `return cls(icrs)`.  In this case `cls` can only be a subclass of `SkyCoord` (unlike low level where different frames have different classes).  Transforming to a subclass isn't quite the right way to go about it since the subclass may have special initialization etc.