@@ -1064,13 +1064,28 @@ template <typename Char> struct named_arg_info {
10641064 int id;
10651065};
10661066
1067+ template <typename Char>
1068+ FMT_CONSTEXPR void check_for_duplicate (named_arg_info<Char>* named_args,
1069+ int named_arg_index,
1070+ basic_string_view<Char> arg_name) {
1071+ if (named_arg_index <= 0 ) return ;
1072+
1073+ for (auto i = 0 ; i < named_arg_index; ++i) {
1074+ if (basic_string_view<Char>(named_args[i].name ) == arg_name) {
1075+ report_error (" duplicate named args found" );
1076+ }
1077+ }
1078+ }
1079+
10671080template <typename Char, typename T, FMT_ENABLE_IF(!is_named_arg<T>::value)>
10681081void init_named_arg (named_arg_info<Char>*, int & arg_index, int &, const T&) {
10691082 ++arg_index;
10701083}
1084+
10711085template <typename Char, typename T, FMT_ENABLE_IF(is_named_arg<T>::value)>
10721086void init_named_arg (named_arg_info<Char>* named_args, int & arg_index,
10731087 int & named_arg_index, const T& arg) {
1088+ check_for_duplicate<Char>(named_args, named_arg_index, arg.name );
10741089 named_args[named_arg_index++] = {arg.name , arg_index++};
10751090}
10761091
@@ -1084,6 +1099,7 @@ template <typename T, typename Char,
10841099 FMT_ENABLE_IF (is_static_named_arg<T>::value)>
10851100FMT_CONSTEXPR void init_static_named_arg (named_arg_info<Char>* named_args,
10861101 int & arg_index, int & named_arg_index) {
1102+ check_for_duplicate<Char>(named_args, named_arg_index, T::name);
10871103 named_args[named_arg_index++] = {T::name, arg_index++};
10881104}
10891105
0 commit comments