Commit 8dde913d authored by Andrew Krieger's avatar Andrew Krieger Committed by Facebook Github Bot

std::basic_ostream operator<< overload for FixedString

Summary:
When attempting to output a FixedString into eg. glog or
some other ostream, it is first being implicitly converted to StringPiece
and then that is printed using the overloaded operator<<. If another
suitable implicit conversion is provided, eg. to `dynamic`, compilers
cannot choose between either one. Instead, overload operator<< directly
on FixedString to resolve the ambiguity.

Reviewed By: yfeldblum, ericniebler

Differential Revision: D5492779

fbshipit-source-id: 92d661e5471a91057d7a0d010420709c5d59232f
parent b229e1a5
...@@ -2938,6 +2938,15 @@ class BasicFixedString : private detail::fixedstring::FixedStringBase { ...@@ -2938,6 +2938,15 @@ class BasicFixedString : private detail::fixedstring::FixedStringBase {
} }
}; };
template <class C, std::size_t N>
inline std::basic_ostream<C>& operator<<(
std::basic_ostream<C>& os,
const BasicFixedString<C, N>& string) {
using StreamSize = decltype(os.width());
os.write(string.begin(), static_cast<StreamSize>(string.size()));
return os;
}
/** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** /** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
* Symmetric relational operators * Symmetric relational operators
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment