pw_span: Begin transitioning to std::span

- Provide an implementation of std::span accessible from the <span>
  header.
- Add tests to confirm that std::span and pw::span implicitly convert to
  one another.

Change-Id: I02e8ffc289975810b51ef32ffbc3b59a6e037caf
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12760
Commit-Queue: Wyatt Hepler <hepler@google.com>
Reviewed-by: Keir Mierle <keir@google.com>
diff --git a/pw_span/BUILD.gn b/pw_span/BUILD.gn
index 737f6f5..cd2c881 100644
--- a/pw_span/BUILD.gn
+++ b/pw_span/BUILD.gn
@@ -19,18 +19,27 @@
 import("$dir_pw_docgen/docs.gni")
 import("$dir_pw_unit_test/test.gni")
 config("default_config") {
-  include_dirs = [ "public" ]
+  include_dirs = [
+    "public",
+    "public_overrides",
+  ]
 }
 
 pw_source_set("pw_span") {
   public_configs = [ ":default_config" ]
   public_deps = [ "$dir_pw_polyfill" ]
-  public = [ "public/pw_span/span.h" ]
-  sources = public
+  public = [
+    "public/pw_span/span.h",
+    "public_overrides/span",
+  ]
+  sources = [ "public/pw_span/internal/span.h" ]
 }
 
 pw_test_group("tests") {
-  tests = [ ":test" ]
+  tests = [
+    ":test",
+    ":pw_span_test",
+  ]
 }
 
 pw_test("test") {
@@ -38,6 +47,11 @@
   sources = [ "span_test.cc" ]
 }
 
+pw_test("pw_span_test") {
+  deps = [ ":pw_span" ]
+  sources = [ "pw_span_test.cc" ]
+}
+
 pw_doc_group("docs") {
   sources = [ "docs.rst" ]
 }