diff --git a/include/libcamera/base/internal/cxx20.h b/include/libcamera/base/internal/cxx20.h
index 70a43f83c9..1f4caf56f8 100644
--- a/include/libcamera/base/internal/cxx20.h
+++ b/include/libcamera/base/internal/cxx20.h
@@ -15,4 +15,28 @@
 
 namespace libcamera::internal::cxx20 {
 
+/**
+ * \internal
+ * \brief std::type_identity
+ *
+ * Implementation of std::type_identity for C++17.
+ */
+template<typename T> struct type_identity {
+	/**
+	 * \internal
+	 * \brief std::type_identity<T>::type
+	 *
+	 * Type alias matching the template parameter.
+	 */
+	using type = T;
+};
+
+/**
+ * \internal
+ * \brief std::type_identity_t
+ *
+ * Implementation of std::type_identity_t for C++17.
+ */
+template<typename T> using type_identity_t = typename type_identity<T>::type;
+
 } /* namespace libcamera::internal::cxx20 */
