@@ -979,16 +979,22 @@ struct arg_data<T, Char, NUM_ARGS, 0> {
979
979
template <typename Char>
980
980
inline void init_named_args (named_arg_info<Char>*, int , int ) {}
981
981
982
- template <typename Char, typename T, typename ... Tail>
982
+ template <typename T> struct is_named_arg : std::false_type {};
983
+
984
+ template <typename T, typename Char>
985
+ struct is_named_arg <named_arg<Char, T>> : std::true_type {};
986
+
987
+ template <typename Char, typename T, typename ... Tail,
988
+ FMT_ENABLE_IF (!is_named_arg<T>::value)>
983
989
void init_named_args (named_arg_info<Char>* named_args, int arg_count,
984
990
int named_arg_count, const T&, const Tail&... args) {
985
991
init_named_args (named_args, arg_count + 1 , named_arg_count, args...);
986
992
}
987
993
988
- template <typename Char, typename T, typename ... Tail>
994
+ template <typename Char, typename T, typename ... Tail,
995
+ FMT_ENABLE_IF (is_named_arg<T>::value)>
989
996
void init_named_args (named_arg_info<Char>* named_args, int arg_count,
990
- int named_arg_count, const named_arg<Char, T>& arg,
991
- const Tail&... args) {
997
+ int named_arg_count, const T& arg, const Tail&... args) {
992
998
named_args[named_arg_count++] = {arg.name , arg_count};
993
999
init_named_args (named_args, arg_count + 1 , named_arg_count, args...);
994
1000
}
@@ -997,11 +1003,6 @@ template <typename... Args>
997
1003
FMT_CONSTEXPR FMT_INLINE void init_named_args (std::nullptr_t , int , int ,
998
1004
const Args&...) {}
999
1005
1000
- template <typename T> struct is_named_arg : std::false_type {};
1001
-
1002
- template <typename T, typename Char>
1003
- struct is_named_arg <named_arg<Char, T>> : std::true_type {};
1004
-
1005
1006
template <bool B = false > constexpr size_t count () { return B ? 1 : 0 ; }
1006
1007
template <bool B1, bool B2, bool ... Tail> constexpr size_t count () {
1007
1008
return (B1 ? 1 : 0 ) + count<B2, Tail...>();
@@ -1277,10 +1278,10 @@ template <typename Context> struct arg_mapper {
1277
1278
return val;
1278
1279
}
1279
1280
1280
- template <typename T>
1281
- FMT_CONSTEXPR FMT_INLINE auto map (const named_arg<char_type, T>& val )
1282
- -> decltype(std::declval<arg_mapper>().map(val .value)) {
1283
- return map (val .value );
1281
+ template <typename T, FMT_ENABLE_IF(is_named_arg<T>::value) >
1282
+ FMT_CONSTEXPR FMT_INLINE auto map(const T& named_arg )
1283
+ -> decltype(std::declval<arg_mapper>().map(named_arg .value)) {
1284
+ return map (named_arg .value );
1284
1285
}
1285
1286
1286
1287
unformattable map (...) { return {}; }
0 commit comments