Код: Выделить всё
#include
struct T1 {};
struct T2 {};
struct T3 {};
struct T4 {};
void bar(T1, T2, T3, T4) {
}
template
concept IsT = std::same_as || std::same_as ||
std::same_as || std::same_as;
void foo(IsT auto x1, IsT auto x2, IsT auto x3, IsT auto x4) {
// How to order the types of x1, x2, x3, x4 and call bar(x?, x?, x?, x?)?
}
int main() {
foo(T1{},T2{},T3{},T4{}); // ok
foo(T4{},T3{},T2{},T1{}); // ok
foo(T3{},T2{},T1{},T4{}); // ok
// ...
}
Пользователь может вызвать foo в любом порядке аргументов, но, наконец,
Код: Выделить всё
barТривиальное решение — использовать грубую силу для разделения 24 случаев, что очевидно утомительно и подвержено ошибкам.
Есть ли способ решения этой проблемы без грубой силы? Я использую C++20.
Подробнее здесь: https://stackoverflow.com/questions/793 ... -any-order
Мобильная версия