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));