Index: include/initializer_list
===================================================================
--- include/initializer_list	(revision 189183)
+++ include/initializer_list	(working copy)
@@ -29,15 +29,15 @@
     typedef const E* iterator;
     typedef const E* const_iterator;
 
-    initializer_list() noexcept;
+    initializer_list() noexcept; // constexpr in C++14
 
-    size_t   size()  const noexcept;
-    const E* begin() const noexcept;
-    const E* end()   const noexcept;
+    size_t   size()  const noexcept; // constexpr in C++14
+    const E* begin() const noexcept; // constexpr in C++14
+    const E* end()   const noexcept; // constexpr in C++14
 };
 
-template<class E> const E* begin(initializer_list<E> il) noexcept;
-template<class E> const E* end(initializer_list<E> il) noexcept;
+template<class E> const E* begin(initializer_list<E> il) noexcept; // constexpr in C++14
+template<class E> const E* end(initializer_list<E> il) noexcept; // constexpr in C++14
 
 }  // std
 
@@ -62,6 +62,7 @@
     size_t    __size_;
 
     _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_CONSTEXPR_AFTER_CXX11
     initializer_list(const _Ep* __b, size_t __s) _NOEXCEPT
         : __begin_(__b),
           __size_(__s)
@@ -75,15 +76,26 @@
     typedef const _Ep* iterator;
     typedef const _Ep* const_iterator;
 
-    _LIBCPP_ALWAYS_INLINE initializer_list() _NOEXCEPT : __begin_(nullptr), __size_(0) {}
+    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_CONSTEXPR_AFTER_CXX11
+    initializer_list() _NOEXCEPT : __begin_(nullptr), __size_(0) {}
 
-    _LIBCPP_ALWAYS_INLINE size_t    size()  const _NOEXCEPT {return __size_;}
-    _LIBCPP_ALWAYS_INLINE const _Ep* begin() const _NOEXCEPT {return __begin_;}
-    _LIBCPP_ALWAYS_INLINE const _Ep* end()   const _NOEXCEPT {return __begin_ + __size_;}
+    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_CONSTEXPR_AFTER_CXX11
+    size_t    size()  const _NOEXCEPT {return __size_;}
+    
+    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_CONSTEXPR_AFTER_CXX11
+    const _Ep* begin() const _NOEXCEPT {return __begin_;}
+
+    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_CONSTEXPR_AFTER_CXX11
+    const _Ep* end()   const _NOEXCEPT {return __begin_ + __size_;}
 };
 
 template<class _Ep>
 inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_CONSTEXPR_AFTER_CXX11
 const _Ep*
 begin(initializer_list<_Ep> __il) _NOEXCEPT
 {
@@ -92,6 +104,7 @@
 
 template<class _Ep>
 inline _LIBCPP_INLINE_VISIBILITY
+_LIBCPP_CONSTEXPR_AFTER_CXX11
 const _Ep*
 end(initializer_list<_Ep> __il) _NOEXCEPT
 {
Index: test/language.support/support.initlist/support.initlist.access/access.pass.cpp
===================================================================
--- test/language.support/support.initlist/support.initlist.access/access.pass.cpp	(revision 189183)
+++ test/language.support/support.initlist/support.initlist.access/access.pass.cpp	(working copy)
@@ -32,6 +32,23 @@
     }
 };
 
+#if _LIBCPP_STD_VER > 11
+struct B
+{
+    constexpr B(std::initializer_list<int> il)
+    {
+        const int* b = il.begin();
+        const int* e = il.end();
+        assert(il.size() == 3);
+        assert(e - b == il.size());
+        assert(*b++ == 3);
+        assert(*b++ == 2);
+        assert(*b++ == 1);
+    }
+};
+
+#endif  // _LIBCPP_STD_VER > 11
+
 #endif  // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
 
 int main()
@@ -39,4 +56,7 @@
 #ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
     A test1 = {3, 2, 1};
 #endif
+#if _LIBCPP_STD_VER > 11
+    constexpr B test2 = {3, 2, 1};
+#endif  // _LIBCPP_STD_VER > 11
 }
Index: test/language.support/support.initlist/support.initlist.cons/default.pass.cpp
===================================================================
--- test/language.support/support.initlist/support.initlist.cons/default.pass.cpp	(revision 189183)
+++ test/language.support/support.initlist/support.initlist.cons/default.pass.cpp	(working copy)
@@ -22,4 +22,8 @@
     std::initializer_list<A> il;
     assert(il.size() == 0);
 #endif  // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
+#if _LIBCPP_STD_VER > 11
+    constexpr std::initializer_list<A> il2;
+    static_assert(il2.size() == 0, "");
+#endif  // _LIBCPP_STD_VER > 11
 }
Index: test/language.support/support.initlist/support.initlist.range/begin_end.pass.cpp
===================================================================
--- test/language.support/support.initlist/support.initlist.range/begin_end.pass.cpp	(revision 189183)
+++ test/language.support/support.initlist/support.initlist.range/begin_end.pass.cpp	(working copy)
@@ -30,6 +30,22 @@
     }
 };
 
+#if _LIBCPP_STD_VER > 11
+struct B
+{
+    constexpr B(std::initializer_list<int> il)
+    {
+        const int* b = begin(il);
+        const int* e = end(il);
+        assert(il.size() == 3);
+        assert(e - b == il.size());
+        assert(*b++ == 3);
+        assert(*b++ == 2);
+        assert(*b++ == 1);
+    }
+};
+
+#endif  // _LIBCPP_STD_VER > 11
 #endif  // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
 
 int main()
@@ -37,4 +53,7 @@
 #ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
     A test1 = {3, 2, 1};
 #endif
+#if _LIBCPP_STD_VER > 11
+    constexpr B test2 = {3, 2, 1};
+#endif  // _LIBCPP_STD_VER > 11
 }
