diff options
author | Eric Fiselier <eric@efcs.ca> | 2016-11-17 20:08:43 +0000 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2016-11-17 20:08:43 +0000 |
commit | a93ebeca94f812e18b4f465d98aad94f92220354 (patch) | |
tree | b902ca21ad9dd3cdeff87b5358c4a4a4b38be29b /include | |
parent | c0ccadbd90117d43d10c61f86c90d1e00e59b9e0 (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/__config | 5 | ||||
-rw-r--r-- | include/utility | 15 |
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 {}; |