     /// - Note: Any subsequent mutation will set this value to nil, and `rawValue` and `description` getters
     /// will have to rebuild the string for every invocation. So mutating leads to the unoptimized code path,
     /// but for values created from either a string or an array of elements, this value is cached.
+    @_versioned
     internal private(set) var string: String?
     
     /// Initialize with an array of elements.


private extension DBusObjectPath.Element {
    
    static let nonASCIICharacters = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ0123456789").inverted
}

extension DBusObjectPath.Element: Equatable {

            // validate string
            guard substring.isEmpty == false, // No element may be an empty string.
                substring.contains(DBusObjectPath.separator) == false, // Multiple '/' characters cannot occur in sequence.
                substring.rangeOfCharacter(from: Element.invalidCharacters) == nil // only ASCII characters "[A-Z][a-z][0-9]_"
                else { return nil }
            
            self.substring = substring
