Cannot explicitly specialize a generic function
| Originator: | nacho4d | ||
| Number: | rdar://20583619 | Date Originated: | 2015/0417 |
| Status: | Open | Resolved: | |
| Product: | Product Version: | ||
| Classification: | Serius bug | Reproducible: | Always |
Summary:
The compiler does not allow me to use a generic function of the form:
func myFunction<T>() -> Void {}
Steps to Reproduce:
1. Write a function of above form:
func myFunction<T>() -> Void {}
2. Call it:
myFunction<MyObject>()
3. Compile it
OR
Just execute the attached code in a playground :)
Expected Results:
It compiles without issues
Actual Results:
Error: Cannot explicitly specialize a generic function
Version:
Xcode 6.3
swift 1.2
Notes:
Same error on swift1.1
- Not only me:
http://stackoverflow.com/questions/27965439/cannot-explicitly-specialize-a-generic-function
http://stackoverflow.com/questions/28726937/how-do-i-call-a-generic-swift-function-when-none-of-the-arguments-provides-the-g
https://twitter.com/dangerdave/status/490385202170982401
Attached code:
import Foundation
protocol Registrable: NSObjectProtocol {
static func registerIfNeeded()
static func unregister()
init()
}
class Something: NSObject, Registrable {
static func registerIfNeeded() {
}
static func unregister() {
}
override required init() {
}
}
func doMyThing<T: Registrable>(whatever: Int) {
// Before doing my stuff I make sure the class is registered
T.registerIfNeeded()
// Now I can do my thing
var t = T()
}
//: No way the compiler can know about `Something` unless it is passed explicitly. However it does not work explicitly too: **ERROR** ***Cannot explicitly specialize a generic function***
doMyThing<Something>(123)
func doMyThing2<T: Registrable>(index: Int) -> T {
T.registerIfNeeded()
var t = T()
return t
}
doMyThing2(123) as Something // This works because the compiler got a hint
Comments
Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at bugreport.apple.com before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!