pw_{log,log_rpc,multisink,protobuf,span}: Span explicit template params

`span` deduction guide uses not compatible with `std::span` deduction guide rules.

Bug: b/239856986
Change-Id: I8e672dbcaa06d690ddeeef1a9bbe9010201a1e53
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/111590
Reviewed-by: Wyatt Hepler <hepler@google.com>
Commit-Queue: Prabhu Karthikeyan Rajasekaran <prabhukr@google.com>
diff --git a/pw_log/proto_utils.cc b/pw_log/proto_utils.cc
index 7d1ce01..6ca31fb 100644
--- a/pw_log/proto_utils.cc
+++ b/pw_log/proto_utils.cc
@@ -41,7 +41,7 @@
   }
 
   // Defer status checks until the end.
-  Status status = encoder.WriteMessage(as_bytes(span(message)));
+  Status status = encoder.WriteMessage(as_bytes(span<const char>(message)));
   status = encoder.WriteLineLevel(PackLineLevel(line_number, level));
   if (flags != 0) {
     status = encoder.WriteFlags(flags);
@@ -50,13 +50,13 @@
 
   // Module name and file name may or may not be present.
   if (!module_name.empty()) {
-    status = encoder.WriteModule(as_bytes(span(module_name)));
+    status = encoder.WriteModule(as_bytes(span<const char>(module_name)));
   }
   if (!file_name.empty()) {
-    status = encoder.WriteFile(as_bytes(span(file_name)));
+    status = encoder.WriteFile(as_bytes(span<const char>(file_name)));
   }
   if (!thread_name.empty()) {
-    status = encoder.WriteThread(as_bytes(span(thread_name)));
+    status = encoder.WriteThread(as_bytes(span<const char>(thread_name)));
   }
   PW_TRY(encoder.status());
   return ConstByteSpan(encoder);
diff --git a/pw_log_rpc/log_filter_test.cc b/pw_log_rpc/log_filter_test.cc
index 7e2b827..f43a35a 100644
--- a/pw_log_rpc/log_filter_test.cc
+++ b/pw_log_rpc/log_filter_test.cc
@@ -48,7 +48,7 @@
                                      ConstByteSpan thread) {
   auto metadata = log_tokenized::Metadata::Set<log_level, module, flags, 0>();
   return log::EncodeTokenizedLog(metadata,
-                                 as_bytes(span(message)),
+                                 as_bytes(span<const char>(message)),
                                  /*ticks_since_epoch=*/0,
                                  thread,
                                  buffer);
diff --git a/pw_log_rpc/log_service_test.cc b/pw_log_rpc/log_service_test.cc
index a8296be..f7eee9c 100644
--- a/pw_log_rpc/log_service_test.cc
+++ b/pw_log_rpc/log_service_test.cc
@@ -100,7 +100,7 @@
                              ConstByteSpan thread) {
     Result<ConstByteSpan> encoded_log_result =
         log::EncodeTokenizedLog(metadata,
-                                as_bytes(span(message)),
+                                as_bytes(span<const char>(message)),
                                 timestamp,
                                 thread,
                                 entry_encode_buffer_);
diff --git a/pw_log_rpc/rpc_log_drain.cc b/pw_log_rpc/rpc_log_drain.cc
index 57e5a8c..4b85e99 100644
--- a/pw_log_rpc/rpc_log_drain.cc
+++ b/pw_log_rpc/rpc_log_drain.cc
@@ -40,7 +40,7 @@
   // Encode drop count and reason, if any, in log proto.
   log::LogEntry::MemoryEncoder encoder(encoded_drop_message_buffer);
   if (!reason.empty()) {
-    encoder.WriteMessage(as_bytes(span(reason))).IgnoreError();
+    encoder.WriteMessage(as_bytes(span<const char>(reason))).IgnoreError();
   }
   encoder.WriteDropped(drop_count).IgnoreError();
   if (!encoder.status().ok()) {
diff --git a/pw_log_rpc/rpc_log_drain_test.cc b/pw_log_rpc/rpc_log_drain_test.cc
index c28c44e..97b3eed 100644
--- a/pw_log_rpc/rpc_log_drain_test.cc
+++ b/pw_log_rpc/rpc_log_drain_test.cc
@@ -206,7 +206,7 @@
     return {.metadata = kSampleMetadata,
             .timestamp = kSampleTimestamp,
             .dropped = 0,
-            .tokenized_data = as_bytes(span(message)),
+            .tokenized_data = as_bytes(span<const char>(message)),
             .thread = as_bytes(span(kSampleThreadName))};
   }
 
diff --git a/pw_multisink/multisink_test.cc b/pw_multisink/multisink_test.cc
index 8d5e247..041550c 100644
--- a/pw_multisink/multisink_test.cc
+++ b/pw_multisink/multisink_test.cc
@@ -510,7 +510,7 @@
   MultiSink multisink(buffer);
 
   for (std::string_view entry : kExpectedEntries) {
-    multisink.HandleEntry(as_bytes(span(entry)));
+    multisink.HandleEntry(as_bytes(span<const char>(entry)));
   }
 
   size_t entry_count = 0;
@@ -541,7 +541,7 @@
   MultiSink multisink(buffer);
 
   for (std::string_view entry : kExpectedEntries) {
-    multisink.HandleEntry(as_bytes(span(entry)));
+    multisink.HandleEntry(as_bytes(span<const char>(entry)));
   }
 
   size_t entry_count = 0;
diff --git a/pw_protobuf/map_utils_test.cc b/pw_protobuf/map_utils_test.cc
index 98a113c..56a33d0 100644
--- a/pw_protobuf/map_utils_test.cc
+++ b/pw_protobuf/map_utils_test.cc
@@ -81,8 +81,8 @@
 
   std::byte stream_pipe_buffer[1];
   for (auto ele : kMapData) {
-    stream::MemoryReader key_reader(as_bytes(span{ele.key}));
-    stream::MemoryReader value_reader(as_bytes(span{ele.value}));
+    stream::MemoryReader key_reader(as_bytes(span<const char>{ele.key}));
+    stream::MemoryReader value_reader(as_bytes(span<const char>{ele.value}));
     ASSERT_OK(WriteProtoStringToBytesMapEntry(ele.field_number,
                                               key_reader,
                                               ele.key.size(),
@@ -119,8 +119,8 @@
   constexpr uint32_t kFieldNumber = 1;
   std::string_view key = "key_bar";
   std::string_view value = "bar_a";
-  stream::MemoryReader key_reader(as_bytes(span{key}));
-  stream::MemoryReader value_reader(as_bytes(span{value}));
+  stream::MemoryReader key_reader(as_bytes(span<const char>{key}));
+  stream::MemoryReader value_reader(as_bytes(span<const char>{value}));
   std::byte stream_pipe_buffer[1];
   ASSERT_EQ(
       WriteProtoStringToBytesMapEntry(kFieldNumber,
@@ -138,8 +138,8 @@
   stream::MemoryWriter writer(encode_buffer);
   std::string_view key = "key_bar";
   std::string_view value = "bar_a";
-  stream::MemoryReader key_reader(as_bytes(span{key}));
-  stream::MemoryReader value_reader(as_bytes(span{value}));
+  stream::MemoryReader key_reader(as_bytes(span<const char>{key}));
+  stream::MemoryReader value_reader(as_bytes(span<const char>{value}));
   std::byte stream_pipe_buffer[1];
 
   ASSERT_EQ(
diff --git a/pw_protobuf/message.cc b/pw_protobuf/message.cc
index ea2797d..bc4f31b 100644
--- a/pw_protobuf/message.cc
+++ b/pw_protobuf/message.cc
@@ -136,7 +136,7 @@
 }
 
 Result<bool> String::Equal(std::string_view str) {
-  return Bytes::Equal(as_bytes(span{str}));
+  return Bytes::Equal(as_bytes(span<const char>{str}));
 }
 
 Message::iterator& Message::iterator::operator++() {
diff --git a/pw_protobuf/public/pw_protobuf/encoder.h b/pw_protobuf/public/pw_protobuf/encoder.h
index ee3d52b..cea42f7 100644
--- a/pw_protobuf/public/pw_protobuf/encoder.h
+++ b/pw_protobuf/public/pw_protobuf/encoder.h
@@ -576,7 +576,7 @@
   //
   // Precondition: Encoder has no active child encoder.
   Status WriteString(uint32_t field_number, std::string_view value) {
-    return WriteBytes(field_number, as_bytes(span(value)));
+    return WriteBytes(field_number, as_bytes(span<const char>(value)));
   }
 
   // Writes a proto string key-value pair.
diff --git a/pw_span/span_test.cc b/pw_span/span_test.cc
index ba14551..9e46d53 100644
--- a/pw_span/span_test.cc
+++ b/pw_span/span_test.cc
@@ -107,7 +107,7 @@
 
 TEST(SpanTest, DeductionGuides_MutableContainerWithConstElements) {
   std::string_view string("Hello");
-  auto the_span = span(string);
+  auto the_span = span<const char>(string);
   static_assert(the_span.extent == dynamic_extent);
 
   EXPECT_STREQ("Hello", the_span.data());