[re.alg.replace].  This finishes all of <regex>.  That being said, <regex> is exceptionally difficult to thoroughly test.  If anyone has the ability to test this, combined with the interest to do so, now would be a good time. :-)

llvm-svn: 111333
diff --git a/libcxx/test/re/re.alg/re.alg.replace/test2.pass.cpp b/libcxx/test/re/re.alg/re.alg.replace/test2.pass.cpp
new file mode 100644
index 0000000..351c6a9
--- /dev/null
+++ b/libcxx/test/re/re.alg/re.alg.replace/test2.pass.cpp
@@ -0,0 +1,107 @@
+//===----------------------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <regex>
+
+// template <class OutputIterator, class BidirectionalIterator,
+//           class traits, class charT, class ST, class SA>
+//     OutputIterator
+//     regex_replace(OutputIterator out,
+//                   BidirectionalIterator first, BidirectionalIterator last,
+//                   const basic_regex<charT, traits>& e,
+//                   const charT* fmt,
+//                   regex_constants::match_flag_type flags =
+//                                              regex_constants::match_default);
+
+#include <regex>
+#include <cassert>
+
+#include "../../iterators.h"
+
+int main()
+{
+    {
+        std::regex phone_numbers("\\d{3}-\\d{4}");
+        const char phone_book[] = "555-1234, 555-2345, 555-3456";
+        typedef output_iterator<char*> Out;
+        typedef bidirectional_iterator<const char*> Bi;
+        char buf[100] = {0};
+        Out r = std::regex_replace(Out(buf), Bi(std::begin(phone_book)),
+                                    Bi(std::end(phone_book)-1), phone_numbers,
+                                    "123-$&");
+        assert(r.base() == buf+40);
+        assert(buf == std::string("123-555-1234, 123-555-2345, 123-555-3456"));
+    }
+    {
+        std::regex phone_numbers("\\d{3}-\\d{4}");
+        const char phone_book[] = "555-1234, 555-2345, 555-3456";
+        typedef output_iterator<char*> Out;
+        typedef bidirectional_iterator<const char*> Bi;
+        char buf[100] = {0};
+        Out r = std::regex_replace(Out(buf), Bi(std::begin(phone_book)),
+                                    Bi(std::end(phone_book)-1), phone_numbers,
+                                    "123-$&",
+                                    std::regex_constants::format_sed);
+        assert(r.base() == buf+43);
+        assert(buf == std::string("123-$555-1234, 123-$555-2345, 123-$555-3456"));
+    }
+    {
+        std::regex phone_numbers("\\d{3}-\\d{4}");
+        const char phone_book[] = "555-1234, 555-2345, 555-3456";
+        typedef output_iterator<char*> Out;
+        typedef bidirectional_iterator<const char*> Bi;
+        char buf[100] = {0};
+        Out r = std::regex_replace(Out(buf), Bi(std::begin(phone_book)),
+                                    Bi(std::end(phone_book)-1), phone_numbers,
+                                    "123-&",
+                                    std::regex_constants::format_sed);
+        assert(r.base() == buf+40);
+        assert(buf == std::string("123-555-1234, 123-555-2345, 123-555-3456"));
+    }
+    {
+        std::regex phone_numbers("\\d{3}-\\d{4}");
+        const char phone_book[] = "555-1234, 555-2345, 555-3456";
+        typedef output_iterator<char*> Out;
+        typedef bidirectional_iterator<const char*> Bi;
+        char buf[100] = {0};
+        Out r = std::regex_replace(Out(buf), Bi(std::begin(phone_book)),
+                                    Bi(std::end(phone_book)-1), phone_numbers,
+                                    "123-$&",
+                                    std::regex_constants::format_no_copy);
+        assert(r.base() == buf+36);
+        assert(buf == std::string("123-555-1234123-555-2345123-555-3456"));
+    }
+    {
+        std::regex phone_numbers("\\d{3}-\\d{4}");
+        const char phone_book[] = "555-1234, 555-2345, 555-3456";
+        typedef output_iterator<char*> Out;
+        typedef bidirectional_iterator<const char*> Bi;
+        char buf[100] = {0};
+        Out r = std::regex_replace(Out(buf), Bi(std::begin(phone_book)),
+                                    Bi(std::end(phone_book)-1), phone_numbers,
+                                    "123-$&",
+                                    std::regex_constants::format_first_only);
+        assert(r.base() == buf+32);
+        assert(buf == std::string("123-555-1234, 555-2345, 555-3456"));
+    }
+    {
+        std::regex phone_numbers("\\d{3}-\\d{4}");
+        const char phone_book[] = "555-1234, 555-2345, 555-3456";
+        typedef output_iterator<char*> Out;
+        typedef bidirectional_iterator<const char*> Bi;
+        char buf[100] = {0};
+        Out r = std::regex_replace(Out(buf), Bi(std::begin(phone_book)),
+                                    Bi(std::end(phone_book)-1), phone_numbers,
+                                    "123-$&",
+                                    std::regex_constants::format_first_only |
+                                    std::regex_constants::format_no_copy);
+        assert(r.base() == buf+12);
+        assert(buf == std::string("123-555-1234"));
+    }
+}