Fix the default constructibility of __compressed_pair.

This patch fixes a bug where the =default default ctor for
__compressed_pair was incorrect for const qualified types.

llvm-svn: 300152
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: 4104cf8257717c068622383441ee37bacaa1b74a
diff --git a/include/memory b/include/memory
index 0688765..f184713 100644
--- a/include/memory
+++ b/include/memory
@@ -2079,7 +2079,13 @@
   typedef const _Tp& const_reference;
 
 #ifndef _LIBCPP_CXX03_LANG
-  __compressed_pair_elem() = default;
+  template <bool _Dummy = true, class = typename enable_if<
+      __dependent_type<is_default_constructible<_Tp>, _Dummy>::value
+    >::type
+  >
+  _LIBCPP_CONSTEXPR __compressed_pair_elem()
+      _NOEXCEPT_(is_nothrow_default_constructible<_Tp>::value)
+    : __value_() {}
 
   template <class _Up, class = typename enable_if<
                            !is_same<__compressed_pair_elem, _Up>::value>::type>
@@ -2112,7 +2118,7 @@
   typedef _Tp __value_type;
 
 #ifndef _LIBCPP_CXX03_LANG
-  __compressed_pair_elem() = default;
+  _LIBCPP_CONSTEXPR __compressed_pair_elem() = default;
 
   template <class _Up, class = typename enable_if<
                            !is_same<__compressed_pair_elem, _Up>::value>::type>