From eb34122153cc64c5727d62726b475ba1a6817452 Mon Sep 17 00:00:00 2001 From: Howard Hinnant Date: Thu, 1 Aug 2013 00:41:55 +0000 Subject: [PATCH] Constrain fill_n -> memset operations to include implicit convertibility to unsigned char. This fixes http://llvm.org/bugs/show_bug.cgi?id=16764. Also a drive-by fix on a chrono test suite bug. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@187552 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/algorithm | 1 + .../time/time.duration/time.duration.cons/default.pass.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/include/algorithm b/include/algorithm index 19d016fb..119fbbbb 100644 --- a/include/algorithm +++ b/include/algorithm @@ -2012,6 +2012,7 @@ fill_n(_OutputIterator __first, _Size __n, const _Tp& __value_) return _VSTD::__fill_n(__first, __n, __value_, integral_constant::value && is_trivially_assignable::type, _Tp>::value && + is_convertible<_Tp, unsigned char>::value && sizeof(typename remove_pointer<_OutputIterator>::type) == 1>()); } diff --git a/test/utilities/time/time.duration/time.duration.cons/default.pass.cpp b/test/utilities/time/time.duration/time.duration.cons/default.pass.cpp index 837f4372..c5299096 100644 --- a/test/utilities/time/time.duration/time.duration.cons/default.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.cons/default.pass.cpp @@ -27,7 +27,7 @@ test() D d; assert(d.count() == typename D::rep()); #ifndef _LIBCPP_HAS_NO_CONSTEXPR - constexpr D d2; + constexpr D d2 = D(); static_assert(d2.count() == typename D::rep(), ""); #endif }