         self.build = build
     }
     
-    public required init(_ value: String) {
+    public init(_ value: String) {
         let parts = pattern.groupsOfFirstMatch(value)
         
         let majorStr = parts[1]

import Foundation


public class Version : Equatable, Comparable {
    public let major: Int
    public let minor: Int?
    public let patch: Int?
    public let prerelease: String?
    public let build: String?
    
    public required init(major: Int = 0, minor: Int? = nil, patch: Int? = nil, prerelease: String? = nil, build: String? = nil) {
        self.major = major
        self.minor = minor
        self.patch = patch

extension Version: StringLiteralConvertible {
    public typealias ExtendedGraphemeClusterLiteralType = StringLiteralType
    
    public static func convertFromExtendedGraphemeClusterLiteral(value: ExtendedGraphemeClusterLiteralType) -> Version {
        return self(major: value.toInt()!)
    }
    
    public static func convertFromStringLiteral(value: StringLiteralType) -> Version {
        return self(value)
    }
}
