Restore `bool T::ParseFrom(const char*, size_t)` support for MSVC. IIRC, it was problematic for MSVC 2017 and/or MSVC 2019, but https://github.com/google/oss-policies-info/commit/dca3ce04cd812e03c71107a7fdea419acbd6432c raised the support baseline to MSVC 2022, so let's try it... Change-Id: Id00483381c1f6c499a2da0c2d40d235c95dedfaa Reviewed-on: https://code-review.googlesource.com/c/re2/+/63050 Reviewed-by: Alex Chernyakhovsky <achernya@google.com> Reviewed-by: Paul Wankadia <junyer@google.com>
diff --git a/re2/re2.h b/re2/re2.h index 7ea44e0..13bf39f 100644 --- a/re2/re2.h +++ b/re2/re2.h
@@ -890,14 +890,12 @@ re2_internal::Parse4ary<T>::value, int>::type; -#if !defined(_MSC_VER) template <typename T> using CanParseFrom = typename std::enable_if< std::is_member_function_pointer< decltype(static_cast<bool (T::*)(const char*, size_t)>( &T::ParseFrom))>::value, int>::type; -#endif public: Arg() : Arg(nullptr) {} @@ -909,10 +907,8 @@ template <typename T, CanParse4ary<T> = 0> Arg(T* ptr) : arg_(ptr), parser_(DoParse4ary<T>) {} -#if !defined(_MSC_VER) template <typename T, CanParseFrom<T> = 0> Arg(T* ptr) : arg_(ptr), parser_(DoParseFrom<T>) {} -#endif typedef bool (*Parser)(const char* str, size_t n, void* dest); @@ -938,13 +934,11 @@ return re2_internal::Parse(str, n, reinterpret_cast<T*>(dest), 10); } -#if !defined(_MSC_VER) template <typename T> static bool DoParseFrom(const char* str, size_t n, void* dest) { if (dest == NULL) return true; return reinterpret_cast<T*>(dest)->ParseFrom(str, n); } -#endif void* arg_; Parser parser_;
diff --git a/re2/testing/re2_arg_test.cc b/re2/testing/re2_arg_test.cc index 4b00be3..78d4aee 100644 --- a/re2/testing/re2_arg_test.cc +++ b/re2/testing/re2_arg_test.cc
@@ -135,7 +135,6 @@ } TEST(RE2ArgTest, ParseFromTest) { -#if !defined(_MSC_VER) struct { bool ParseFrom(const char* str, size_t n) { LOG(INFO) << "str = " << str << ", n = " << n; @@ -155,7 +154,6 @@ } obj2; RE2::Arg arg2(&obj2); EXPECT_FALSE(arg2.Parse("two", 3)); -#endif } TEST(RE2ArgTest, OptionalDoubleTest) {