summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2017-04-13 00:50:45 +0000
committerEric Fiselier <eric@efcs.ca>2017-04-13 00:50:45 +0000
commit4104cf8257717c068622383441ee37bacaa1b74a (patch)
tree99f78be651a0cf834d7c3018b04567dccc7da363
parent29a0f0db9ebb58f1b6fdb2614654be4ea72134cd (diff)
downloadbcm5719-llvm-4104cf8257717c068622383441ee37bacaa1b74a.tar.gz
bcm5719-llvm-4104cf8257717c068622383441ee37bacaa1b74a.zip
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
-rw-r--r--libcxx/include/memory10
1 files changed, 8 insertions, 2 deletions
diff --git a/libcxx/include/memory b/libcxx/include/memory
index 068876542a6..f18471315a1 100644
--- a/libcxx/include/memory
+++ b/libcxx/include/memory
@@ -2079,7 +2079,13 @@ struct __compressed_pair_elem {
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 @@ struct __compressed_pair_elem<_Tp, _Idx, true> : private _Tp {
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>
OpenPOWER on IntegriCloud