unique_ids.hpp array concepts type_traits serif/utils/misc/std_helper/variadic_cleaning.hpp src/include/serif/discretization/domain/ids/validation/concepts.hpp serif serif::discretization serif::discretization::domain serif::discretization::domain::ids serif::discretization::domain::ids::validation This file defines a utility function to check if a pack of values are all unique. This is used to validate that domain and boundary IDs are distinct. Emily M. Boudreaux #pragmaonce #include<array> #include<concepts> #include<type_traits> #include"serif/utils/misc/std_helper/variadic_cleaning.hpp" namespaceserif::discretization::domain::ids::validation{ template<typename...Ts> requires(std::equality_comparable<Ts>&&...) [[nodiscard]]constevalboolall_unique_values(Ts...values)noexcept{ constexprstd::size_tvalueCount=utils::misc::std_helper::CountVariadicArguments<Ts...>(); ifconstexpr(valueCount<2){ returntrue; }else{ conststd::array<std::common_type_t<Ts...>,valueCount>vals{values...}; for(std::size_ti=0;i<vals.size();++i){ for(std::size_tj=i+1;j<vals.size();++j){ if(vals[i]==vals[j])returnfalse; } } returntrue; } } }