Add a std::nullptr_t ctor overload to RE2::Arg.
This makes it possible to pass a C++11 nullptr as a capture argument
to RE2::FullMatch() and friends.
Change-Id: I34bdb1cd6b1e0670a262cebb0d7be8a4cec5c1fc
Reviewed-on: https://code-review.googlesource.com/22410
Reviewed-by: Paul Wankadia <junyer@google.com>
diff --git a/re2/re2.h b/re2/re2.h
index 9307704..a153161 100644
--- a/re2/re2.h
+++ b/re2/re2.h
@@ -774,6 +774,7 @@
// Constructor specially designed for NULL arguments
Arg(void*);
+ Arg(std::nullptr_t);
typedef bool (*Parser)(const char* str, size_t n, void* dest);
@@ -849,6 +850,7 @@
inline RE2::Arg::Arg() : arg_(NULL), parser_(parse_null) { }
inline RE2::Arg::Arg(void* p) : arg_(p), parser_(parse_null) { }
+inline RE2::Arg::Arg(std::nullptr_t p) : arg_(p), parser_(parse_null) { }
inline bool RE2::Arg::Parse(const char* str, size_t n) const {
return (*parser_)(str, n, arg_);
diff --git a/re2/testing/re2_test.cc b/re2/testing/re2_test.cc
index d71dce7..7fdc836 100644
--- a/re2/testing/re2_test.cc
+++ b/re2/testing/re2_test.cc
@@ -707,10 +707,16 @@
TEST(RE2, FullMatchIgnoredArg) {
int i;
string s;
- // Ignored arg
+
+ // Old-school NULL should be ignored.
CHECK(RE2::FullMatch("ruby:1234", "(\\w+)(:)(\\d+)", &s, (void*)NULL, &i));
CHECK_EQ(s, string("ruby"));
CHECK_EQ(i, 1234);
+
+ // C++11 nullptr should also be ignored.
+ CHECK(RE2::FullMatch("rubz:1235", "(\\w+)(:)(\\d+)", &s, nullptr, &i));
+ CHECK_EQ(s, string("rubz"));
+ CHECK_EQ(i, 1235);
}
TEST(RE2, FullMatchTypedNullArg) {