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