HIDL templated destructor

This change implements a simple template function to explicitly destruct
objects in HIDL. This is particularly useful in the context of HIDL safe
unions, where non-primitive objects are constructed using the placement
new operator.

Bug: n/a
Test: Ran make
Change-Id: Iceb7d311732f7ea67e132a32ab7410b78ce371c2
diff --git a/base/include/hidl/HidlInternal.h b/base/include/hidl/HidlInternal.h
index 5a08bc3..d000a87 100644
--- a/base/include/hidl/HidlInternal.h
+++ b/base/include/hidl/HidlInternal.h
@@ -48,6 +48,15 @@
 // If "ro.vndk.version" is not set or set to "current", it returns empty string.
 std::string getVndkVersionStr();
 
+// Explicitly invokes the parameterized element's destructor;
+// intended to be used alongside the placement new operator.
+template<typename T>
+void destructElement(T* element) {
+    if (element != nullptr) {
+        element->~T();
+    }
+}
+
 // HIDL client/server code should *NOT* use this class.
 //
 // hidl_pointer wraps a pointer without taking ownership,