diff --git a/include/regex b/include/regex
index 7641a4a..c9f5097 100644
--- a/include/regex
+++ b/include/regex
@@ -1238,7 +1238,7 @@
         __zero_marked_exprs,
     };
 
-    typedef __state<_CharT> __state;
+    typedef _STD::__state<_CharT> __state;
 
     int __do_;
     const __state* first;
@@ -1275,7 +1275,7 @@
     __state(const __state&);
     __state& operator=(const __state&);
 public:
-    typedef __command<_CharT> __command;
+    typedef _STD::__command<_CharT> __command;
 
     __state() {}
     virtual ~__state() {}
@@ -1296,7 +1296,7 @@
     : public __state<_CharT>
 {
 public:
-    typedef __command<_CharT> __command;
+    typedef _STD::__command<_CharT> __command;
 
     __end_state() {}
 
@@ -1366,7 +1366,7 @@
     typedef __owns_one_state<_CharT> base;
 
 public:
-    typedef __command<_CharT> __command;
+    typedef _STD::__command<_CharT> __command;
 
     explicit __empty_state(__state<_CharT>* __s)
         : base(__s) {}
@@ -1399,7 +1399,7 @@
     typedef __has_one_state<_CharT> base;
 
 public:
-    typedef __command<_CharT> __command;
+    typedef _STD::__command<_CharT> __command;
 
     explicit __empty_non_own_state(__state<_CharT>* __s)
         : base(__s) {}
@@ -1463,7 +1463,7 @@
     bool __greedy_;
 
 public:
-    typedef __command<_CharT> __command;
+    typedef _STD::__command<_CharT> __command;
 
     explicit __loop(unsigned __loop_id,
                           __state<_CharT>* __s1, __owns_one_state<_CharT>* __s2,
@@ -1524,7 +1524,7 @@
     size_t __loop_id_;
 
 public:
-    typedef __command<_CharT> __command;
+    typedef _STD::__command<_CharT> __command;
 
     explicit __zero_loop_count(size_t __loop_id,
                           __state<_CharT>* __s1)
@@ -1565,7 +1565,7 @@
     size_t __loop_id_;
 
 public:
-    typedef __command<_CharT> __command;
+    typedef _STD::__command<_CharT> __command;
 
     explicit __increment_loop_count(size_t __loop_id,
                           __state<_CharT>* __s1)
@@ -1607,7 +1607,7 @@
     size_t __end_;
 
 public:
-    typedef __command<_CharT> __command;
+    typedef _STD::__command<_CharT> __command;
 
     explicit __zero_marked_exprs(size_t __begin, size_t __end,
                           __state<_CharT>* __s1)
@@ -1653,7 +1653,7 @@
 
     unsigned __mexp_;
 public:
-    typedef __command<_CharT> __command;
+    typedef _STD::__command<_CharT> __command;
 
     explicit __begin_marked_subexpression(unsigned __mexp, __state<_CharT>* __s)
         : base(__s), __mexp_(__mexp) {}
@@ -1693,7 +1693,7 @@
 
     unsigned __mexp_;
 public:
-    typedef __command<_CharT> __command;
+    typedef _STD::__command<_CharT> __command;
 
     explicit __end_marked_subexpression(unsigned __mexp, __state<_CharT>* __s)
         : base(__s), __mexp_(__mexp) {}
@@ -1724,26 +1724,22 @@
     return __command(__command::__accept_but_not_consume, this->first());
 }
 
-// __state_arg
+// __r_anchor
 
 template <class _CharT>
-class __state_arg
+class __r_anchor
     : public __owns_one_state<_CharT>
 {
     typedef __owns_one_state<_CharT> base;
 
-    unsigned __arg_;
-
-    __state_arg(const __state_arg&);
-    __state_arg& operator=(const __state_arg&);
 public:
-    typedef __command<_CharT> __command;
+    typedef _STD::__command<_CharT> __command;
 
-    __state_arg(unsigned __a, __state<_CharT>* __s)
-        : base(__s), __arg_(__a) {}
+    __r_anchor(__state<_CharT>* __s)
+        : base(__s) {}
 
-    virtual __command __test(const _CharT*, const _CharT*,
-                             const _CharT*,
+    virtual __command __test(const _CharT*, const _CharT* __c,
+                             const _CharT* __l,
                              vector<size_t>&,
                              sub_match<const _CharT*>*,
                              regex_constants::match_flag_type) const;
@@ -1751,19 +1747,20 @@
     virtual string speak() const
     {
         ostringstream os;
-        os << "state arg " << __arg_;
+        os << "right anchor";
         return os.str();
     }
 };
 
 template <class _CharT>
 __command<_CharT>
-__state_arg<_CharT>::__test(const _CharT*, const _CharT* __c, const _CharT*,
+__r_anchor<_CharT>::__test(const _CharT*, const _CharT* __c, const _CharT* __l,
                              vector<size_t>&,
                              sub_match<const _CharT*>*,
                              regex_constants::match_flag_type) const
 {
-    return __command(__arg_, this->first());
+    return __c == __l ?
+        __command(__command::__accept_but_not_consume, this->first()) : __command();
 }
 
 // __match_char
@@ -1779,7 +1776,7 @@
     __match_char(const __match_char&);
     __match_char& operator=(const __match_char&);
 public:
-    typedef __command<_CharT> __command;
+    typedef _STD::__command<_CharT> __command;
 
     __match_char(_CharT __c, __state<_CharT>* __s)
         : base(__s), __c_(__c) {}
@@ -1829,9 +1826,10 @@
     int __open_count_;
     shared_ptr<__empty_state<_CharT> > __start_;
     __owns_one_state<_CharT>* __end_;
+    bool __left_anchor_;
 
-    typedef __command<_CharT> __command;
-    typedef __state<_CharT> __state;
+    typedef _STD::__command<_CharT> __command;
+    typedef _STD::__state<_CharT> __state;
 
 public:
     // constants:
@@ -1848,13 +1846,16 @@
 
     // construct/copy/destroy:
     basic_regex()
-        : __flags_(), __marked_count_(0), __loop_count_(0), __open_count_(0), __end_(0)
+        : __flags_(), __marked_count_(0), __loop_count_(0), __open_count_(0),
+          __end_(0), __left_anchor_(false)
         {}
     explicit basic_regex(const value_type* __p, flag_type __f = regex_constants::ECMAScript)
-        : __flags_(__f), __marked_count_(0), __loop_count_(0), __open_count_(0), __end_(0)
+        : __flags_(__f), __marked_count_(0), __loop_count_(0), __open_count_(0),
+          __end_(0), __left_anchor_(false)
         {__parse(__p, __p + __traits_.length(__p));}
     basic_regex(const value_type* __p, size_t __len, flag_type __f)
-        : __flags_(__f), __marked_count_(0), __loop_count_(0), __open_count_(0), __end_(0)
+        : __flags_(__f), __marked_count_(0), __loop_count_(0), __open_count_(0),
+          __end_(0), __left_anchor_(false)
         {__parse(__p, __p + __len);}
     basic_regex(const basic_regex&);
 #ifdef _LIBCPP_MOVE
@@ -1863,16 +1864,19 @@
     template <class _ST, class _SA>
         explicit basic_regex(const basic_string<value_type, _ST, _SA>& __p,
                              flag_type __f = regex_constants::ECMAScript)
-        : __flags_(__f), __marked_count_(0), __loop_count_(0), __open_count_(0), __end_(0)
+        : __flags_(__f), __marked_count_(0), __loop_count_(0), __open_count_(0),
+          __end_(0), __left_anchor_(false)
         {__parse(__p.begin(), __p.end());}
     template <class _ForwardIterator>
         basic_regex(_ForwardIterator __first, _ForwardIterator __last,
                     flag_type __f = regex_constants::ECMAScript)
-        : __flags_(__f), __marked_count_(0), __loop_count_(0), __open_count_(0), __end_(0)
+        : __flags_(__f), __marked_count_(0), __loop_count_(0), __open_count_(0),
+          __end_(0), __left_anchor_(false)
         {__parse(__first, __last);}
     basic_regex(initializer_list<value_type> __il,
                 flag_type __f = regex_constants::ECMAScript)
-        : __flags_(__f), __marked_count_(0), __loop_count_(0), __open_count_(0), __end_(0)
+        : __flags_(__f), __marked_count_(0), __loop_count_(0), __open_count_(0),
+          __end_(0), __left_anchor_(false)
         {__parse(__il.begin(), __il.end());}
 
     ~basic_regex();
@@ -2002,8 +2006,8 @@
         _ForwardIterator
         __parse_QUOTED_CHAR_ERE(_ForwardIterator __first, _ForwardIterator __last);
 
-    void __push_l_anchor() {}
-    void __push_r_anchor() {}
+    void __push_l_anchor() {__left_anchor_ = true;}
+    void __push_r_anchor();
     void __push_match_any() {}
     void __push_greedy_inf_repeat(size_t __min, __owns_one_state<_CharT>* __s,
                                   unsigned __mexp_begin = 0, unsigned __mexp_end = 0)
@@ -2945,6 +2949,15 @@
     __end_ = static_cast<__owns_one_state<_CharT>*>(__end_->first());
 }
 
+template <class _CharT, class _Traits>
+void
+basic_regex<_CharT, _Traits>::__push_r_anchor()
+{
+    __end_->first() = new __r_anchor<_CharT>(__end_->first());
+    __end_ = static_cast<__owns_one_state<_CharT>*>(__end_->first());
+}
+
+
 typedef basic_regex<char>    regex;
 typedef basic_regex<wchar_t> wregex;
 
@@ -3698,6 +3711,8 @@
         match_results<_BidirectionalIterator, _Allocator>& __m,
         regex_constants::match_flag_type __flags) const
 {
+    if (__left_anchor_)
+        __flags |= regex_constants::match_continuous;
     __m.__init(1 + mark_count(), __first, __last);
     vector<size_t> __lc(__loop_count());
     if (__match_at_start(__first, __last, __m, __lc, __flags))
