Chromium Code Reviews| Index: webrtc/base/optional.h |
| diff --git a/webrtc/base/optional.h b/webrtc/base/optional.h |
| index f5354ee0f25fdb6eabcf6fa367e3db64152681ee..104ba6684900d9ba30645db9aaf3cd0cc0c395e5 100644 |
| --- a/webrtc/base/optional.h |
| +++ b/webrtc/base/optional.h |
| @@ -13,6 +13,7 @@ |
| #include <algorithm> |
| #include <memory> |
| +#include <ostream> |
| #include <utility> |
| #include "webrtc/base/array_view.h" |
| @@ -296,6 +297,19 @@ class Optional final { |
| }; |
| }; |
| +// Add a PrintTo function for Optionals for use with gtest, only if |
| +// there is already a valid operator<< available for the enclosed type. |
| +// The cast in decltype will ensure PrintTo has a void return type. |
| +template <typename T> |
| +auto PrintTo(const Optional<T>& opt, std::ostream* os) |
|
ossu
2017/02/16 14:23:48
Turns out the compiler does clever things that lin
tommi
2017/02/17 13:46:23
Can we call this PrintToForTest?
There's a risk t
ossu
2017/02/17 13:50:06
Alas, no, it needs to be called PrintTo for gtest
|
| + -> decltype(static_cast<void>(*os << *opt)) { |
|
ossu
2017/02/16 13:20:05
The SFINAE here is maybe not super-obvious if one'
kwiberg-webrtc
2017/02/16 14:07:37
Yes, more explanation is probably called for. How
ossu
2017/02/16 14:23:48
Will do!
|
| + if (opt) { |
| + *os << *opt; |
|
kwiberg-webrtc
2017/02/16 14:07:37
This is test code, so maybe indicate that the valu
ossu
2017/02/16 14:23:48
I considered that but was unsure if it would be mo
|
| + } else { |
| + *os << "<empty optional>"; |
| + } |
| +} |
| + |
| } // namespace rtc |
| #endif // WEBRTC_BASE_OPTIONAL_H_ |