diff options
author | Victor Zverovich <victor.zverovich@gmail.com> | 2019-06-04 18:50:30 -0700 |
---|---|---|
committer | Victor Zverovich <victor.zverovich@gmail.com> | 2019-06-04 18:50:30 -0700 |
commit | c264e641eafcbec43b8bff4feea57428f1c38bb4 (patch) | |
tree | 1e2200d57067a111b1a7a3cfed6124f79674e757 /include | |
parent | 4aa0dc578b237ecc4b70ff7ae6170a3989c038cb (diff) | |
download | fmtlib-c264e641eafcbec43b8bff4feea57428f1c38bb4.tar.gz |
Add conditional_t for pre-C++14
Diffstat (limited to 'include')
-rw-r--r-- | include/fmt/chrono.h | 6 | ||||
-rw-r--r-- | include/fmt/core.h | 30 | ||||
-rw-r--r-- | include/fmt/format.h | 11 | ||||
-rw-r--r-- | include/fmt/prepare.h | 10 | ||||
-rw-r--r-- | include/fmt/printf.h | 9 | ||||
-rw-r--r-- | include/fmt/ranges.h | 10 |
6 files changed, 36 insertions, 40 deletions
diff --git a/include/fmt/chrono.h b/include/fmt/chrono.h index 738f1bea..46efc511 100644 --- a/include/fmt/chrono.h +++ b/include/fmt/chrono.h @@ -450,9 +450,9 @@ struct chrono_formatter { OutputIt out; int precision; // rep is unsigned to avoid overflow. - using rep = typename std::conditional< - std::is_integral<Rep>::value && sizeof(Rep) < sizeof(int), unsigned, - typename make_unsigned_or_unchanged<Rep>::type>::type; + using rep = + conditional_t<std::is_integral<Rep>::value && sizeof(Rep) < sizeof(int), + unsigned, typename make_unsigned_or_unchanged<Rep>::type>; rep val; typedef std::chrono::duration<rep> seconds; seconds s; diff --git a/include/fmt/core.h b/include/fmt/core.h index b684d615..c339d0b0 100644 --- a/include/fmt/core.h +++ b/include/fmt/core.h @@ -200,9 +200,11 @@ FMT_BEGIN_NAMESPACE -// An implementation of enable_if_t for pre-C++14 systems. +// Implementations of enable_if_t and other types for pre-C++14 systems. template <bool B, class T = void> using enable_if_t = typename std::enable_if<B, T>::type; +template <bool B, class T, class F> +using conditional_t = typename std::conditional<B, T, F>::type; // An enable_if helper to be used in template parameters which results in much // shorter symbols: https://godbolt.org/z/sWw4vP. Extra parentheses are needed @@ -646,10 +648,9 @@ template <typename Char> struct string_value { }; template <typename Context> struct custom_value { + using parse_context = basic_parse_context<typename Context::char_type>; const void* value; - void (*format)(const void* arg, - basic_parse_context<typename Context::char_type>& parse_ctx, - Context& ctx); + void (*format)(const void* arg, parse_context& parse_ctx, Context& ctx); }; template <typename T, typename Context> @@ -704,10 +705,9 @@ template <typename Context> class value { // have different extension points, e.g. `formatter<T>` for `format` and // `printf_formatter<T>` for `printf`. custom.format = &format_custom_arg< - T, typename std::conditional< - is_formattable<T, Context>::value, - typename Context::template formatter_type<T>, - internal::fallback_formatter<T, char_type>>::type>; + T, conditional_t<is_formattable<T, Context>::value, + typename Context::template formatter_type<T>, + internal::fallback_formatter<T, char_type>>>; } const named_arg_base<char_type>& as_named_arg() { @@ -758,12 +758,11 @@ FMT_MAKE_VALUE_SAME(uint_type, unsigned) // To minimize the number of types we need to deal with, long is translated // either to int or to long long depending on its size. -using long_type = - std::conditional<sizeof(long) == sizeof(int), int, long long>::type; +using long_type = conditional_t<sizeof(long) == sizeof(int), int, long long>; FMT_MAKE_VALUE((sizeof(long) == sizeof(int) ? int_type : long_long_type), long, long_type) -using ulong_type = std::conditional<sizeof(unsigned long) == sizeof(unsigned), - unsigned, unsigned long long>::type; +using ulong_type = conditional_t<sizeof(unsigned long) == sizeof(unsigned), + unsigned, unsigned long long>; FMT_MAKE_VALUE((sizeof(unsigned long) == sizeof(unsigned) ? uint_type : ulong_long_type), unsigned long, ulong_type) @@ -1129,9 +1128,8 @@ template <typename Context, typename... Args> class format_arg_store { // Packed is a macro on MinGW so use IS_PACKED instead. static const bool IS_PACKED = NUM_ARGS < internal::max_packed_args; - using value_type = - typename std::conditional<IS_PACKED, internal::value<Context>, - basic_format_arg<Context>>::type; + using value_type = conditional_t<IS_PACKED, internal::value<Context>, + basic_format_arg<Context>>; // If the arguments are not packed, add one more element to mark the end. static const size_t DATA_SIZE = @@ -1274,7 +1272,7 @@ template <typename Context> class basic_format_args { }; /** An alias to ``basic_format_args<context>``. */ -// It is a separate type rather than a typedef to make symbols readable. +// It is a separate type rather than an alias to make symbols readable. struct format_args : basic_format_args<format_context> { template <typename... Args> format_args(Args&&... arg) diff --git a/include/fmt/format.h b/include/fmt/format.h index 1507b4ea..fa0a473a 100644 --- a/include/fmt/format.h +++ b/include/fmt/format.h @@ -698,8 +698,8 @@ FMT_CONSTEXPR bool is_negative(T) { template <typename T> struct int_traits { // Smallest of uint32_t and uint64_t that is large enough to represent // all values of T. - typedef typename std::conditional<std::numeric_limits<T>::digits <= 32, - uint32_t, uint64_t>::type main_type; + using main_type = + conditional_t<std::numeric_limits<T>::digits <= 32, uint32_t, uint64_t>; }; // Static data is placed in this class template to allow header-only @@ -2181,9 +2181,10 @@ FMT_CONSTEXPR const typename ParseContext::char_type* parse_format_specs( ParseContext& ctx) { // GCC 7.2 requires initializer. typedef typename ParseContext::char_type char_type; - typename std::conditional<is_formattable<T, format_context>::value, - formatter<T, char_type>, - internal::fallback_formatter<T, char_type>>::type f; + conditional_t<is_formattable<T, format_context>::value, + formatter<T, char_type>, + internal::fallback_formatter<T, char_type>> + f; return f.parse(ctx); } diff --git a/include/fmt/prepare.h b/include/fmt/prepare.h index 9b30b5d6..a7078ef8 100644 --- a/include/fmt/prepare.h +++ b/include/fmt/prepare.h @@ -440,9 +440,8 @@ template <typename Format> class compiletime_prepared_parts_type_provider { typedef format_part<char_type> value_type; }; - typedef typename std::conditional<static_cast<bool>(number_of_format_parts), - format_parts_array<number_of_format_parts>, - empty>::type type; + using type = conditional_t<static_cast<bool>(number_of_format_parts), + format_parts_array<number_of_format_parts>, empty>; }; template <typename Parts> class compiletime_prepared_parts_collector { @@ -674,9 +673,8 @@ struct compiletime_format_tag {}; struct runtime_format_tag {}; template <typename Format> struct format_tag { - typedef typename std::conditional<is_compile_string<Format>::value, - compiletime_format_tag, - runtime_format_tag>::type type; + using type = conditional_t<is_compile_string<Format>::value, + compiletime_format_tag, runtime_format_tag>; }; #if FMT_USE_CONSTEXPR diff --git a/include/fmt/printf.h b/include/fmt/printf.h index 29f36323..0828c321 100644 --- a/include/fmt/printf.h +++ b/include/fmt/printf.h @@ -91,15 +91,14 @@ class arg_converter : public function<void> { template <typename U, FMT_ENABLE_IF(std::is_integral<U>::value)> void operator()(U value) { bool is_signed = type_ == 'd' || type_ == 'i'; - typedef typename std::conditional<std::is_same<T, void>::value, U, T>::type - TargetType; - if (const_check(sizeof(TargetType) <= sizeof(int))) { + using target_type = conditional_t<std::is_same<T, void>::value, U, T>; + if (const_check(sizeof(target_type) <= sizeof(int))) { // Extra casts are used to silence warnings. if (is_signed) { arg_ = internal::make_arg<Context>( - static_cast<int>(static_cast<TargetType>(value))); + static_cast<int>(static_cast<target_type>(value))); } else { - typedef typename make_unsigned_or_bool<TargetType>::type Unsigned; + typedef typename make_unsigned_or_bool<target_type>::type Unsigned; arg_ = internal::make_arg<Context>( static_cast<unsigned>(static_cast<Unsigned>(value))); } diff --git a/include/fmt/ranges.h b/include/fmt/ranges.h index a3a0c7a0..18124d3a 100644 --- a/include/fmt/ranges.h +++ b/include/fmt/ranges.h @@ -94,11 +94,11 @@ template <typename T, typename _ = void> struct is_range_ : std::false_type {}; #if !FMT_MSC_VER || FMT_MSC_VER > 1800 template <typename T> -struct is_range_<T, typename std::conditional< - false, - conditional_helper<decltype(std::declval<T>().begin()), - decltype(std::declval<T>().end())>, - void>::type> : std::true_type {}; +struct is_range_< + T, conditional_t<false, + conditional_helper<decltype(std::declval<T>().begin()), + decltype(std::declval<T>().end())>, + void>> : std::true_type {}; #endif /// tuple_size and tuple_element check. |