Index: test/containers/sequences/deque/deque.cons/size.pass.cpp
===================================================================
--- test/containers/sequences/deque/deque.cons/size.pass.cpp	(revision 189976)
+++ test/containers/sequences/deque/deque.cons/size.pass.cpp	(working copy)
@@ -20,12 +20,34 @@
 
 template <class T, class Allocator>
 void
-test(unsigned n)
+test2(unsigned n)
 {
+#if _LIBCPP_STD_VER > 11
     typedef std::deque<T, Allocator> C;
     typedef typename C::const_iterator const_iterator;
     assert(DefaultOnly::count == 0);
     {
+    C d(n, Allocator());
+    assert(DefaultOnly::count == n);
+    assert(d.size() == n);
+    assert(distance(d.begin(), d.end()) == d.size());
+#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
+    for (const_iterator i = d.begin(), e = d.end(); i != e; ++i)
+        assert(*i == T());
+#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
+    }
+    assert(DefaultOnly::count == 0);
+#endif
+}
+
+template <class T, class Allocator>
+void
+test1(unsigned n)
+{
+    typedef std::deque<T, Allocator> C;
+    typedef typename C::const_iterator const_iterator;
+    assert(DefaultOnly::count == 0);
+    {
     C d(n);
     assert(DefaultOnly::count == n);
     assert(d.size() == n);
@@ -38,6 +60,29 @@
     assert(DefaultOnly::count == 0);
 }
 
+template <class T, class Allocator>
+void
+test3(unsigned n, Allocator const &alloc = Allocator())
+{
+#if _LIBCPP_STD_VER > 11
+    typedef std::deque<T, Allocator> C;
+    typedef typename C::const_iterator const_iterator;
+    {
+    C d(n, alloc);
+    assert(d.size() == n);
+    assert(d.get_allocator() == alloc);
+    }
+#endif
+}
+
+template <class T, class Allocator>
+void
+test(unsigned n)
+{
+    test1<T, Allocator> ( n );
+    test2<T, Allocator> ( n );
+}
+
 int main()
 {
     test<DefaultOnly, std::allocator<DefaultOnly> >(0);
@@ -52,8 +97,17 @@
     test<DefaultOnly, std::allocator<DefaultOnly> >(4095);
     test<DefaultOnly, std::allocator<DefaultOnly> >(4096);
     test<DefaultOnly, std::allocator<DefaultOnly> >(4097);
-    test<DefaultOnly, stack_allocator<DefaultOnly, 4096> >(4095);
+
+    test1<DefaultOnly, stack_allocator<DefaultOnly, 4096> >(4095);
+
 #if __cplusplus >= 201103L
     test<DefaultOnly, min_allocator<DefaultOnly> >(4095);
 #endif
+
+#if _LIBCPP_STD_VER > 11
+    test3<DefaultOnly, std::allocator<DefaultOnly>> (1023);
+    test3<int, std::allocator<int>>(1);
+    test3<int, min_allocator<int>> (3);
+#endif
+
 }
Index: include/deque
===================================================================
--- include/deque	(revision 189976)
+++ include/deque	(working copy)
@@ -41,6 +41,7 @@
     deque() noexcept(is_nothrow_default_constructible<allocator_type>::value);
     explicit deque(const allocator_type& a);
     explicit deque(size_type n);
+    explicit deque(size_type n, const Allocator& a); // C++14
     deque(size_type n, const value_type& v);
     deque(size_type n, const value_type& v, const allocator_type& a);
     template <class InputIterator>
@@ -1209,6 +1210,9 @@
         {}
     _LIBCPP_INLINE_VISIBILITY deque(const allocator_type& __a) : __base(__a) {}
     explicit deque(size_type __n);
+#if _LIBCPP_STD_VER > 11
+    explicit deque(size_type __n, const _Allocator& __a);
+#endif
     deque(size_type __n, const value_type& __v);
     deque(size_type __n, const value_type& __v, const allocator_type& __a);
     template <class _InputIter>
@@ -1431,7 +1435,17 @@
         __append(__n);
 }
 
+#if _LIBCPP_STD_VER > 11
 template <class _Tp, class _Allocator>
+deque<_Tp, _Allocator>::deque(size_type __n, const _Allocator& __a)
+    : __base(__a)
+{
+    if (__n > 0)
+        __append(__n);
+}
+#endif
+
+template <class _Tp, class _Allocator>
 deque<_Tp, _Allocator>::deque(size_type __n, const value_type& __v)
 {
     if (__n > 0)
