[#BloombergLP-balb-PipeControlChannel_CStringUtil] = xref:BloombergLP.adoc[BloombergLP]::xref:BloombergLP/balb.adoc[balb]::PipeControlChannel_CStringUtil :relfileprefix: ../../ :mrdocs: This component‐private utility `struct` provides a namespace for the `flatten` overload set intended to be used in concert with an overload set consisting of a function template with a deduced argument and an non‐template overload accepting a `const char *`. The actual implementation of the functionality would be in the `const char *` overload whereas the purpose of the function template is to invoke the `const char *` overload with a null‐terminated string. == Synopsis Declared in `<balb_pipecontrolchannel.h>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct PipeControlChannel_CStringUtil; ---- == Description The function template achieves null‐termination by recursively calling the function and supplying it with the result of `flatten` invoked on the deduced argument. This `flatten` invocation will call `c_str()` on various supported `string` types, will produce a temporary `bsl::string` for possibly non‐null‐terminated `bslstl::StringRef`, and will result in a `BSLMF_ASSERT` for any unsupported type. Calling the function with the temporary `bsl::string` produced from `bslstl::StringRef` will result in a second invocation of `flatten`, this time producing `const char *`, and finally calling the function with a null‐terminated string. Note that the `bslstl::StringRef` overload for `flatten` is provided for backwards compatibility. Without it, the `bsl::string` and `std::string` overloads would be ambiguous. In new code, it is preferable to not provide `bslstl::StringRef` overload in a similar facility and require the clients to explicitly state the string type in their code, making a potential allocation obvious. The `bsl::string_view` overload is not provided for the same reason. Also note that since the constructor for `string` types from `bsl::string_view` is explicit, it is not necessary to support `bsl::string_view` for backwards compatibility, and it is not supported. == Static Member Functions [cols="1,4"] |=== | Name| Description | xref:BloombergLP/balb/PipeControlChannel_CStringUtil/flatten-064.adoc[`flatten`] | `flatten` overloads |=== [.small]#Created with https://www.mrdocs.com[MrDocs]#