pw_containers: Make Pair in FlatMap support CTAD

Adding an explicit deduction guide for Pair does a few things:
* Some cases are not covered by implicit deduction guides, for the same
  reason as for std::pair. For more information, see
  https://en.cppreference.com/w/cpp/utility/pair/deduction_guides
* CTAD can be sketchy in some cases, and so some projects might opt to
  enable something like -Wctad-maybe-unsupported. Adding an explicit
  deduction guide is a signal to the compiler that the type is "opting
  in" to CTAD.

Unfortunately, the aggregate initialization with no types does not work
in all circumstances (for example, it can be tricky to get all the
deductions to line up when using std::apply and a lambda), and the CTAD
option exists as a less verbose option than one where the template
parameters _also_ need to be stated explicitly. Note that the Google
style guide doesn't love CTAD in general:
https://google.github.io/styleguide/cppguide.html#CTAD

(Note: CTAD = class template argument deduction)

Change-Id: Ib4555e8d3655f2a91e8c487641df1b973453723e
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/120731
Reviewed-by: Wyatt Hepler <hepler@google.com>
Commit-Queue: Anqi Dong <anqid@google.com>
1 file changed
tree: bab7be367ababee4a3aa0597a1871848adf01b83
  1. .allstar/
  2. .vscode/
  3. build_overrides/
  4. docker/
  5. docs/
  6. pw_allocator/
  7. pw_analog/
  8. pw_android_toolchain/
  9. pw_arduino_build/
  10. pw_assert/
  11. pw_assert_basic/
  12. pw_assert_log/
  13. pw_assert_tokenized/
  14. pw_assert_zephyr/
  15. pw_base64/
  16. pw_bloat/
  17. pw_blob_store/
  18. pw_bluetooth/
  19. pw_bluetooth_hci/
  20. pw_boot/
  21. pw_boot_cortex_m/
  22. pw_build/
  23. pw_build_info/
  24. pw_build_mcuxpresso/
  25. pw_bytes/
  26. pw_checksum/
  27. pw_chrono/
  28. pw_chrono_embos/
  29. pw_chrono_freertos/
  30. pw_chrono_stl/
  31. pw_chrono_threadx/
  32. pw_chrono_zephyr/
  33. pw_cli/
  34. pw_compilation_testing/
  35. pw_console/
  36. pw_containers/
  37. pw_cpu_exception/
  38. pw_cpu_exception_cortex_m/
  39. pw_crypto/
  40. pw_digital_io/
  41. pw_docgen/
  42. pw_doctor/
  43. pw_env_setup/
  44. pw_file/
  45. pw_function/
  46. pw_fuzzer/
  47. pw_hdlc/
  48. pw_hex_dump/
  49. pw_i2c/
  50. pw_i2c_mcuxpresso/
  51. pw_ide/
  52. pw_interrupt/
  53. pw_interrupt_cortex_m/
  54. pw_interrupt_zephyr/
  55. pw_intrusive_ptr/
  56. pw_kvs/
  57. pw_libc/
  58. pw_log/
  59. pw_log_android/
  60. pw_log_basic/
  61. pw_log_null/
  62. pw_log_rpc/
  63. pw_log_string/
  64. pw_log_tokenized/
  65. pw_log_zephyr/
  66. pw_malloc/
  67. pw_malloc_freelist/
  68. pw_metric/
  69. pw_minimal_cpp_stdlib/
  70. pw_module/
  71. pw_multisink/
  72. pw_package/
  73. pw_perf_test/
  74. pw_persistent_ram/
  75. pw_polyfill/
  76. pw_preprocessor/
  77. pw_presubmit/
  78. pw_protobuf/
  79. pw_protobuf_compiler/
  80. pw_random/
  81. pw_result/
  82. pw_ring_buffer/
  83. pw_router/
  84. pw_rpc/
  85. pw_rust/
  86. pw_snapshot/
  87. pw_software_update/
  88. pw_span/
  89. pw_spi/
  90. pw_status/
  91. pw_stm32cube_build/
  92. pw_stream/
  93. pw_string/
  94. pw_symbolizer/
  95. pw_sync/
  96. pw_sync_baremetal/
  97. pw_sync_embos/
  98. pw_sync_freertos/
  99. pw_sync_stl/
  100. pw_sync_threadx/
  101. pw_sync_zephyr/
  102. pw_sys_io/
  103. pw_sys_io_arduino/
  104. pw_sys_io_baremetal_lm3s6965evb/
  105. pw_sys_io_baremetal_stm32f429/
  106. pw_sys_io_emcraft_sf2/
  107. pw_sys_io_mcuxpresso/
  108. pw_sys_io_stdio/
  109. pw_sys_io_stm32cube/
  110. pw_sys_io_zephyr/
  111. pw_system/
  112. pw_target_runner/
  113. pw_thread/
  114. pw_thread_embos/
  115. pw_thread_freertos/
  116. pw_thread_stl/
  117. pw_thread_threadx/
  118. pw_tls_client/
  119. pw_tls_client_boringssl/
  120. pw_tls_client_mbedtls/
  121. pw_tokenizer/
  122. pw_tool/
  123. pw_toolchain/
  124. pw_trace/
  125. pw_trace_tokenized/
  126. pw_transfer/
  127. pw_unit_test/
  128. pw_varint/
  129. pw_watch/
  130. pw_web/
  131. pw_work_queue/
  132. seed/
  133. targets/
  134. third_party/
  135. ts/
  136. zephyr/
  137. .bazelignore
  138. .bazelrc
  139. .clang-format
  140. .clang-tidy
  141. .eslintrc.json
  142. .gitattributes
  143. .gitignore
  144. .gn
  145. .mypy.ini
  146. .prettierrc.js
  147. .pw_ide.yaml
  148. .pylintrc
  149. activate.bat
  150. Android.bp
  151. AUTHORS
  152. bootstrap.bat
  153. bootstrap.sh
  154. BUILD.bazel
  155. BUILD.gn
  156. BUILDCONFIG.gn
  157. CMakeLists.txt
  158. jest.config.ts
  159. Kconfig.zephyr
  160. LICENSE
  161. modules.gni
  162. OWNERS
  163. package-lock.json
  164. package.json
  165. PIGWEED_MODULES
  166. PW_PLUGINS
  167. README.md
  168. rollup.config.js
  169. tsconfig.json
  170. WORKSPACE
README.md

Pigweed

Pigweed is an open source collection of embedded-targeted libraries–or as we like to call them, modules. These modules are building blocks and infrastructure that enable faster and more reliable development on small-footprint MMU-less 32-bit microcontrollers like the STMicroelectronics STM32L452 or the Nordic nRF52832.

For more information please see our website: https://pigweed.dev/.

Links