non-mutating complete