diff --git a/include/__config b/include/__config index 88ea441b..33c386b1 100644 --- a/include/__config +++ b/include/__config @@ -336,6 +336,10 @@ typedef __char32_t char32_t; #define _LIBCPP_HAS_NO_CXX14_CONSTEXPR #endif +#if !(__has_feature(cxx_variable_templates)) +#define _LIBCPP_HAS_NO_VARIABLE_TEMPLATES +#endif + #if __ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L #if defined(__FreeBSD__) #define _LIBCPP_HAS_QUICK_EXIT @@ -415,6 +419,8 @@ namespace std { // No version of GCC supports relaxed constexpr rules #define _LIBCPP_HAS_NO_CXX14_CONSTEXPR +// GCC 5 will support variable templates +#define _LIBCPP_HAS_NO_VARIABLE_TEMPLATES #define _NOEXCEPT throw() #define _NOEXCEPT_(x) @@ -486,6 +492,7 @@ using namespace _LIBCPP_NAMESPACE __attribute__((__strong__)); #define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER #define _LIBCPP_HAS_NO_CONSTEXPR #define _LIBCPP_HAS_NO_CXX14_CONSTEXPR +#define _LIBCPP_HAS_NO_VARIABLE_TEMPLATES #define _LIBCPP_HAS_NO_UNICODE_CHARS #define _LIBCPP_HAS_NO_DELETED_FUNCTIONS #define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS @@ -528,6 +535,7 @@ namespace std { #define _LIBCPP_HAS_NO_NULLPTR #define _LIBCPP_HAS_NO_UNICODE_CHARS #define _LIBCPP_HAS_IS_BASE_OF +#define _LIBCPP_HAS_NO_VARIABLE_TEMPLATES #if defined(_AIX) #define __MULTILOCALE_API diff --git a/include/experimental/chrono b/include/experimental/chrono index 738ded88..ca9e5f85 100644 --- a/include/experimental/chrono +++ b/include/experimental/chrono @@ -45,12 +45,12 @@ inline namespace fundamentals_v1 { _LIBCPP_BEGIN_NAMESPACE_CHRONO_LFTS -#if __has_feature(cxx_variable_templates) +#ifndef _LIBCPP_HAS_NO_VARIABLE_TEMPLATES template _LIBCPP_CONSTEXPR bool treat_as_floating_point_v = treat_as_floating_point<_Rep>::value; -#endif /* __has_feature(cxx_variable_templates) */ +#endif /* _LIBCPP_HAS_NO_VARIABLE_TEMPLATES */ _LIBCPP_END_NAMESPACE_CHRONO_LFTS diff --git a/include/experimental/ratio b/include/experimental/ratio index a393cef6..a00a2530 100644 --- a/include/experimental/ratio +++ b/include/experimental/ratio @@ -48,7 +48,7 @@ inline namespace fundamentals_v1 { _LIBCPP_BEGIN_NAMESPACE_LFTS -#if __has_feature(cxx_variable_templates) +#ifndef _LIBCPP_HAS_NO_VARIABLE_TEMPLATES template _LIBCPP_CONSTEXPR bool ratio_equal_v = ratio_equal<_R1, _R2>::value; @@ -68,7 +68,7 @@ template _LIBCPP_CONSTEXPR bool ratio_greater_v template _LIBCPP_CONSTEXPR bool ratio_greater_equal_v = ratio_greater_equal<_R1, _R2>::value; -#endif /* __has_feature(cxx_variable_templates) */ +#endif /* _LIBCPP_HAS_NO_VARIABLE_TEMPLATES */ _LIBCPP_END_NAMESPACE_LFTS diff --git a/include/experimental/system_error b/include/experimental/system_error index 9b9ab333..2ec23854 100644 --- a/include/experimental/system_error +++ b/include/experimental/system_error @@ -46,7 +46,7 @@ inline namespace fundamentals_v1 { _LIBCPP_BEGIN_NAMESPACE_LFTS -#if __has_feature(cxx_variable_templates) +#ifndef _LIBCPP_HAS_NO_VARIABLE_TEMPLATES template _LIBCPP_CONSTEXPR bool is_error_code_enum_v = is_error_code_enum<_Tp>::value; @@ -54,7 +54,7 @@ template _LIBCPP_CONSTEXPR bool is_error_code_enum_v template _LIBCPP_CONSTEXPR bool is_error_condition_enum_v = is_error_condition_enum<_Tp>::value; -#endif /* __has_feature(cxx_variable_templates) */ +#endif /* _LIBCPP_HAS_NO_VARIABLE_TEMPLATES */ _LIBCPP_END_NAMESPACE_LFTS diff --git a/include/experimental/type_traits b/include/experimental/type_traits index 35cdada1..ae49fc17 100644 --- a/include/experimental/type_traits +++ b/include/experimental/type_traits @@ -190,7 +190,7 @@ inline namespace fundamentals_v1 { _LIBCPP_BEGIN_NAMESPACE_LFTS -#if __has_feature(cxx_variable_templates) +#ifndef _LIBCPP_HAS_NO_VARIABLE_TEMPLATES // C++14 20.10.4.1, primary type categories @@ -397,7 +397,7 @@ template _LIBCPP_CONSTEXPR bool is_base_of_v template _LIBCPP_CONSTEXPR bool is_convertible_v = is_convertible<_Tp, _Up>::value; -#endif /* __has_feature(cxx_variable_templates) */ +#endif /* _LIBCPP_HAS_NO_VARIABLE_TEMPLATES */ // 3.3.2, Other type transformations /*