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