diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
index 9b0d5a545301..7352c62ec03c 100644
--- a/include/libcamera/controls.h
+++ b/include/libcamera/controls.h
@@ -307,7 +307,7 @@ class ControlInfoMap : private std::unordered_map<const ControlId *, ControlInfo
 public:
 	using Map = std::unordered_map<const ControlId *, ControlInfo>;
 
-	ControlInfoMap() = default;
+	ControlInfoMap();
 	ControlInfoMap(const ControlInfoMap &other) = default;
 	ControlInfoMap(std::initializer_list<Map::value_type> init,
 		       const ControlIdMap &idmap);
diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
index 5c05ba4a7cd0..83f61fd96b24 100644
--- a/src/libcamera/controls.cpp
+++ b/src/libcamera/controls.cpp
@@ -636,6 +636,14 @@ std::string ControlInfo::toString() const
  * \brief The base std::unsorted_map<> container
  */
 
+/**
+ * \brief Construct an empty ControlInfoMap
+ */
+ControlInfoMap::ControlInfoMap()
+	: idmap_(nullptr)
+{
+}
+
 /**
  * \fn ControlInfoMap::ControlInfoMap(const ControlInfoMap &other)
  * \brief Copy constructor, construct a ControlInfoMap from a copy of \a other
