diff --git a/meson.build b/meson.build
index fd508fd7f6b5..74153e1e6ce9 100644
--- a/meson.build
+++ b/meson.build
@@ -6,7 +6,7 @@ project('libcamera', 'c', 'cpp',
     default_options : [
         'werror=true',
         'warning_level=2',
-        'cpp_std=c++17',
+        'cpp_std=c++20',
     ],
     license : 'LGPL 2.1+')
 
diff --git a/src/libcamera/base/log.cpp b/src/libcamera/base/log.cpp
index 81b550e21402..e65d83739315 100644
--- a/src/libcamera/base/log.cpp
+++ b/src/libcamera/base/log.cpp
@@ -325,7 +325,7 @@ private:
 	std::vector<std::unique_ptr<LogCategory>> categories_ LIBCAMERA_TSA_GUARDED_BY(mutex_);
 	std::list<std::pair<std::string, LogSeverity>> levels_;
 
-	std::shared_ptr<LogOutput> output_;
+	std::atomic<std::shared_ptr<LogOutput>> output_;
 };
 
 bool Logger::destroyed_ = false;
@@ -465,7 +465,7 @@ Logger *Logger::instance()
  */
 void Logger::write(const LogMessage &msg)
 {
-	std::shared_ptr<LogOutput> output = std::atomic_load(&output_);
+	std::shared_ptr<LogOutput> output = output_.load();
 	if (!output)
 		return;
 
@@ -477,7 +477,7 @@ void Logger::write(const LogMessage &msg)
  */
 void Logger::backtrace()
 {
-	std::shared_ptr<LogOutput> output = std::atomic_load(&output_);
+	std::shared_ptr<LogOutput> output = output_.load();
 	if (!output)
 		return;
 
