Fixes the "ambiguous overload" compiler error when a mock function takes an argument that supports streaming to basic_ostream<C, T>.
This commit is contained in:
		@@ -597,6 +597,64 @@ TEST(PrintWideStringTest, StringInStdNamespace) {
 | 
			
		||||
}
 | 
			
		||||
#endif  // GTEST_HAS_STD_WSTRING
 | 
			
		||||
 | 
			
		||||
// Tests printing types that support generic streaming (i.e. streaming
 | 
			
		||||
// to std::basic_ostream<Char, CharTraits> for any valid Char and
 | 
			
		||||
// CharTraits types).
 | 
			
		||||
 | 
			
		||||
// Tests printing a non-template type that supports generic streaming.
 | 
			
		||||
 | 
			
		||||
class AllowsGenericStreaming {};
 | 
			
		||||
 | 
			
		||||
template <typename Char, typename CharTraits>
 | 
			
		||||
std::basic_ostream<Char, CharTraits>& operator<<(
 | 
			
		||||
    std::basic_ostream<Char, CharTraits>& os,
 | 
			
		||||
    const AllowsGenericStreaming& a) {
 | 
			
		||||
  return os << "AllowsGenericStreaming";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST(PrintTypeWithGenericStreamingTest, NonTemplateType) {
 | 
			
		||||
  AllowsGenericStreaming a;
 | 
			
		||||
  EXPECT_EQ("AllowsGenericStreaming", Print(a));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Tests printing a template type that supports generic streaming.
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
class AllowsGenericStreamingTemplate {};
 | 
			
		||||
 | 
			
		||||
template <typename Char, typename CharTraits, typename T>
 | 
			
		||||
std::basic_ostream<Char, CharTraits>& operator<<(
 | 
			
		||||
    std::basic_ostream<Char, CharTraits>& os,
 | 
			
		||||
    const AllowsGenericStreamingTemplate<T>& a) {
 | 
			
		||||
  return os << "AllowsGenericStreamingTemplate";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST(PrintTypeWithGenericStreamingTest, TemplateType) {
 | 
			
		||||
  AllowsGenericStreamingTemplate<int> a;
 | 
			
		||||
  EXPECT_EQ("AllowsGenericStreamingTemplate", Print(a));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Tests printing a type that supports generic streaming and can be
 | 
			
		||||
// implicitly converted to another printable type.
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
class AllowsGenericStreamingAndImplicitConversionTemplate {
 | 
			
		||||
 public:
 | 
			
		||||
  operator bool() const { return false; }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <typename Char, typename CharTraits, typename T>
 | 
			
		||||
std::basic_ostream<Char, CharTraits>& operator<<(
 | 
			
		||||
    std::basic_ostream<Char, CharTraits>& os,
 | 
			
		||||
    const AllowsGenericStreamingAndImplicitConversionTemplate<T>& a) {
 | 
			
		||||
  return os << "AllowsGenericStreamingAndImplicitConversionTemplate";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST(PrintTypeWithGenericStreamingTest, TypeImplicitlyConvertible) {
 | 
			
		||||
  AllowsGenericStreamingAndImplicitConversionTemplate<int> a;
 | 
			
		||||
  EXPECT_EQ("AllowsGenericStreamingAndImplicitConversionTemplate", Print(a));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Tests printing STL containers.
 | 
			
		||||
 | 
			
		||||
TEST(PrintStlContainerTest, EmptyDeque) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user