summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2016-11-17 20:08:43 +0000
committerEric Fiselier <eric@efcs.ca>2016-11-17 20:08:43 +0000
commita93ebeca94f812e18b4f465d98aad94f92220354 (patch)
treeb902ca21ad9dd3cdeff87b5358c4a4a4b38be29b /include
parentc0ccadbd90117d43d10c61f86c90d1e00e59b9e0 (diff)
Workaround compilers w/o C++1z inline variables
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@287255 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/__config5
-rw-r--r--include/utility15
2 files changed, 17 insertions, 3 deletions
diff --git a/include/__config b/include/__config
index e9d3e5ff2..a8603bead 100644
--- a/include/__config
+++ b/include/__config
@@ -796,6 +796,11 @@ template <unsigned> struct __static_assert_check {};
#define _LIBCPP_CONSTEXPR_AFTER_CXX14
#endif
+// FIXME: Remove all usages of this macro once compilers catch up.
+#if !defined(__cpp_inline_variables) || (__cpp_inline_variables < 201606L)
+# define _LIBCPP_HAS_NO_INLINE_VARIABLES
+#endif
+
#ifdef _LIBCPP_HAS_NO_RVALUE_REFERENCES
# define _LIBCPP_EXPLICIT_MOVE(x) _VSTD::move(x)
#else
diff --git a/include/utility b/include/utility
index 52c062ddd..364221433 100644
--- a/include/utility
+++ b/include/utility
@@ -897,21 +897,30 @@ _T1 exchange(_T1& __obj, _T2 && __new_value)
struct _LIBCPP_TYPE_VIS in_place_t {
explicit in_place_t() = default;
};
-inline constexpr in_place_t in_place{};
+#ifndef _LIBCPP_HAS_NO_INLINE_VARIABLES
+inline
+#endif
+constexpr in_place_t in_place{};
template <class _Tp>
struct _LIBCPP_TYPE_VIS in_place_type_t {
explicit in_place_type_t() = default;
};
template <class _Tp>
-inline constexpr in_place_type_t<_Tp> in_place_type{};
+#ifndef _LIBCPP_HAS_NO_INLINE_VARIABLES
+inline
+#endif
+constexpr in_place_type_t<_Tp> in_place_type{};
template <size_t _Idx>
struct _LIBCPP_TYPE_VIS in_place_index_t {
explicit in_place_index_t() = default;
};
template <size_t _Idx>
-inline constexpr in_place_index_t<_Idx> in_place_index{};
+#ifndef _LIBCPP_HAS_NO_INLINE_VARIABLES
+inline
+#endif
+constexpr in_place_index_t<_Idx> in_place_index{};
template <class _Tp> struct __is_inplace_type_imp : false_type {};
template <class _Tp> struct __is_inplace_type_imp<in_place_type_t<_Tp>> : true_type {};