Use template instead of macro to release UniquePtrs.

Change-Id: Icb6674517ed48e3f4bb56818eef0c0756d6dd3d3
diff --git a/softkeymaster/keymaster_openssl.cpp b/softkeymaster/keymaster_openssl.cpp
index 3bf4cec..5a25b65 100644
--- a/softkeymaster/keymaster_openssl.cpp
+++ b/softkeymaster/keymaster_openssl.cpp
@@ -92,8 +92,10 @@
  * scoped pointers when we've transferred ownership, without
  * triggering a warning by not using the result of release().
  */
-#define OWNERSHIP_TRANSFERRED(obj)                                                                 \
-    typeof(obj.release()) _dummy __attribute__((unused)) = obj.release()
+template <typename T, typename Delete_T>
+inline void release_because_ownership_transferred(UniquePtr<T, Delete_T>& p) {
+    T* val __attribute__((unused)) = p.release();
+}
 
 /*
  * Checks this thread's OpenSSL error queue and logs if
@@ -274,7 +276,7 @@
         logOpenSSLError("generate_dsa_keypair");
         return -1;
     }
-    OWNERSHIP_TRANSFERRED(dsa);
+    release_because_ownership_transferred(dsa);
 
     return 0;
 }
@@ -331,7 +333,7 @@
         logOpenSSLError("generate_ec_keypair");
         return -1;
     }
-    OWNERSHIP_TRANSFERRED(eckey);
+    release_because_ownership_transferred(eckey);
 
     return 0;
 }
@@ -365,7 +367,7 @@
         logOpenSSLError("generate_rsa_keypair");
         return -1;
     }
-    OWNERSHIP_TRANSFERRED(rsa);
+    release_because_ownership_transferred(rsa);
 
     return 0;
 }
@@ -431,7 +433,7 @@
         logOpenSSLError("openssl_import_keypair");
         return -1;
     }
-    OWNERSHIP_TRANSFERRED(pkcs8);
+    release_because_ownership_transferred(pkcs8);
 
     if (wrap_key(pkey.get(), EVP_PKEY_type(pkey->type), key_blob, key_blob_length)) {
         return -1;