summaryrefslogtreecommitdiffstats
path: root/libcxx/include/ext
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2015-06-13 07:08:02 +0000
committerEric Fiselier <eric@efcs.ca>2015-06-13 07:08:02 +0000
commitee187e247bc2c7b97eb345e1de7f5ccf151e24e5 (patch)
tree8c11cf17b11efa5d05ba2350281d9ebf93964029 /libcxx/include/ext
parent8fcf50515b554bacfb8bc7307149d862b6c2cb93 (diff)
downloadbcm5719-llvm-ee187e247bc2c7b97eb345e1de7f5ccf151e24e5.tar.gz
bcm5719-llvm-ee187e247bc2c7b97eb345e1de7f5ccf151e24e5.zip
[libcxx] Fix detection of __is_final.
Summary: Currently we only enable the use of __is_final(...) with Clang. GCC also provides __is_final(...) since 4.7 in all standard modes. This patch creates the macro _LIBCPP_HAS_IS_FINAL to note the availability of `__is_final`. Reviewers: danalbert, mclow.lists Reviewed By: mclow.lists Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D8795 llvm-svn: 239664
Diffstat (limited to 'libcxx/include/ext')
-rw-r--r--libcxx/include/ext/hash_map15
1 files changed, 7 insertions, 8 deletions
diff --git a/libcxx/include/ext/hash_map b/libcxx/include/ext/hash_map
index d8fc1e6c03c..31fcedfb9f9 100644
--- a/libcxx/include/ext/hash_map
+++ b/libcxx/include/ext/hash_map
@@ -203,6 +203,7 @@ template <class Key, class T, class Hash, class Pred, class Alloc>
#include <__hash_table>
#include <functional>
#include <stdexcept>
+#include <type_traits>
#include <ext/__hash>
#if __DEPRECATED
@@ -213,16 +214,16 @@ template <class Key, class T, class Hash, class Pred, class Alloc>
#endif
#endif
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
namespace __gnu_cxx {
using namespace std;
-template <class _Tp, class _Hash, bool = is_empty<_Hash>::value
-#if __has_feature(is_final)
- && !__is_final(_Hash)
-#endif
+template <class _Tp, class _Hash,
+ bool = is_empty<_Hash>::value && !__libcpp_is_final<_Hash>::value
>
class __hash_map_hasher
: private _Hash
@@ -255,10 +256,8 @@ public:
{return __hash_(__x);}
};
-template <class _Tp, class _Pred, bool = is_empty<_Pred>::value
-#if __has_feature(is_final)
- && !__is_final(_Pred)
-#endif
+template <class _Tp, class _Pred,
+ bool = is_empty<_Pred>::value && !__libcpp_is_final<_Pred>::value
>
class __hash_map_equal
: private _Pred
OpenPOWER on IntegriCloud