summaryrefslogtreecommitdiff
path: root/security/cryptopp/files/patch-nbtheory.cpp
blob: 9ef5cf616ba222f637ddc1b0446dec9d6e343205 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
--- nbtheory.cpp.orig	2013-05-22 00:16:26.761193859 +0000
+++ nbtheory.cpp	2013-05-22 00:15:29.401256454 +0000
@@ -307,7 +307,18 @@
 
 bool PrimeSieve::NextCandidate(Integer &c)
 {
+#if defined(__clang__) && defined(_LIBCPP_VERSION) &&  _LIBCPP_VERSION < 1101
+	// Workaround for a bug in libc++ in std::find on std::vector<bool>
+	std::vector<bool>::iterator pos = m_sieve.begin()+m_next;
+	for (std::vector<bool>::iterator end = m_sieve.end(); pos != end; ++pos)
+	{
+		if (*pos == false)
+			break;
+	}
+	bool safe = SafeConvert(pos - m_sieve.begin(), m_next);
+#else
 	bool safe = SafeConvert(std::find(m_sieve.begin()+m_next, m_sieve.end(), false) - m_sieve.begin(), m_next);
+#endif
 	assert(safe);
 	if (m_next == m_sieve.size())
 	{