diff --git a/example/coroutine-example.cpp b/example/coroutine-example.cpp
index 2302f47..b402070 100644
--- a/example/coroutine-example.cpp
+++ b/example/coroutine-example.cpp
@@ -32,27 +32,30 @@
     for (auto& [property, value] :
          co_await systemd.get_all_properties<variant_type>(ctx))
     {
-        std::cout << property << " is "
-                  << std::visit(
-                         // Convert the variant member to a string for printing.
-                         [](auto v) {
-            if constexpr (std::is_same_v<std::remove_cvref_t<decltype(v)>,
+        std::cout
+            << property << " is "
+            << std::visit(
+                   // Convert the variant member to a string for printing.
+                   [](auto v) {
+                       if constexpr (std::is_same_v<
+                                         std::remove_cvref_t<decltype(v)>,
                                          std::vector<std::string>>)
-            {
-                return std::string{"Array"};
-            }
-            else if constexpr (std::is_same_v<std::remove_cvref_t<decltype(v)>,
+                       {
+                           return std::string{"Array"};
+                       }
+                       else if constexpr (std::is_same_v<
+                                              std::remove_cvref_t<decltype(v)>,
                                               std::string>)
-            {
-                return v;
-            }
-            else
-            {
-                return std::to_string(v);
-            }
-        },
-                         value)
-                  << std::endl;
+                       {
+                           return v;
+                       }
+                       else
+                       {
+                           return std::to_string(v);
+                       }
+                   },
+                   value)
+            << std::endl;
     }
 
     // Try to set the Architecture property (which won't work).
