Как использовать std::swap внутри constexpr функции?
std::swap является constexpr, начиная с c++20.
Поэтому я не могу использовать его в таком случае
struct sortable {
// ...
sortable(int a, int b) : _array({a, b}){
}
// Функция является constexpr в c++17.
template<class T>
CONSTEXPR_17 void sort(T& first, T& last){
// ...
if(*last < *first) {
std::swap(*first, *last); // Error. Не является constexpr в c++17.
}
}
std::array<int, 2> _array;
};
Вместо этого мне нужно писать так:
struct sortable {
template<class T>
CONSTEXPR_17 void sort(T& first, T& last){
// ...
if(*last < *first) {
// swap
auto tmp = std::move(*first);
*first = std::move(*last);
*last = std::move(tmp);
}
}
};
Есть ли какой-то более элегантный способ?