From 88cd46aaec511360705df0fc7e577098877862d0 Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Sun, 29 Oct 2023 10:01:53 +0100
Subject: [PATCH] Add broadcast for single std::string value

---
 src/utils/Messenger.hpp  |  9 +++++++++
 tests/test_Messenger.cpp | 12 ++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/src/utils/Messenger.hpp b/src/utils/Messenger.hpp
index 21e17abf2..ac79ee849 100644
--- a/src/utils/Messenger.hpp
+++ b/src/utils/Messenger.hpp
@@ -766,6 +766,15 @@ class Messenger
         CastArray cast_array = cast_value_to<CastType>::from(data);
         _broadcast_array(cast_array, root_rank);
       }
+    } else if constexpr (std::is_same_v<std::string, DataType>) {
+      Array s = convert_to_array(data);
+      broadcast(s, root_rank);
+      if (m_rank != root_rank) {
+        data.resize(s.size());
+        for (size_t i = 0; i < s.size(); ++i) {
+          data[i] = s[i];
+        }
+      }
     } else {
       static_assert(is_false_v<DataType>, "unexpected type of data");
     }
diff --git a/tests/test_Messenger.cpp b/tests/test_Messenger.cpp
index 4f76e250d..4565614fb 100644
--- a/tests/test_Messenger.cpp
+++ b/tests/test_Messenger.cpp
@@ -223,6 +223,18 @@ TEST_CASE("Messenger", "[mpi]")
       parallel::broadcast(value, 0);
       REQUIRE((value == mpi_check::tri_int{6, 2, 4}));
     }
+
+    {
+      std::string data;
+      if (parallel::rank() == 0) {
+        data = "foo";
+      } else {
+        data = "bar";
+      }
+
+      parallel::broadcast(data, 0);
+      REQUIRE(data == "foo");
+    }
   }
 
   SECTION("broadcast array")
-- 
GitLab