Ensure that RE2::Arg works even with overloaded ParseFrom().

Change-Id: I1dc33738a3c5829e898c736a5d435900c9867bcf
Reviewed-on: https://code-review.googlesource.com/c/re2/+/57970
Reviewed-by: Paul Wankadia <junyer@google.com>
diff --git a/re2/re2.h b/re2/re2.h
index 02fc88f..28b2932 100644
--- a/re2/re2.h
+++ b/re2/re2.h
@@ -829,7 +829,8 @@
 
   template <typename T>
   using CanParseFrom = typename std::enable_if<
-      std::is_member_function_pointer<decltype(&T::ParseFrom)>::value,
+      std::is_member_function_pointer<decltype(
+          (bool (T::*)(const char*, size_t))&T::ParseFrom)>::value,
       int>::type;
 
  public:
diff --git a/re2/testing/re2_arg_test.cc b/re2/testing/re2_arg_test.cc
index ea3c517..a0d1e46 100644
--- a/re2/testing/re2_arg_test.cc
+++ b/re2/testing/re2_arg_test.cc
@@ -148,6 +148,8 @@
       LOG(INFO) << "str = " << str << ", n = " << n;
       return false;
     }
+    // Ensure that RE2::Arg works even with overloaded ParseFrom().
+    void ParseFrom(const char* str) {}
   } obj2;
   RE2::Arg arg2(&obj2);
   EXPECT_FALSE(arg2.Parse("two", 3));