К сожалению, решения, представленные в вышеупомянутой статье «Перегрузка лямбда-функции», не работают. Помогите, потому что:
- Мой вопрос касается концепций/требований, а не типов (здесь ключевое различие).
- В общем случае у меня есть много разных концепций и хаков с помощью if constexpr std::is_same_v становится довольно хрупким; добавлена одна новая концепция, и мне придется найти и обновить весь клиентский код, что невозможно.
Код: Выделить всё
#include
#include
template
void fn_template(Rng& data) {
};
template
void fn_template(Rng& data) {
};
constexpr auto lambda = [](Rng & data) {
};
// Redefinition error, of course
constexpr auto lambda = [](Rng & data) {
};
int main()
{
std::vector v = { 0.0f, 1.0f, 0.0f, 2.0f };
auto no_zeros = v | std::views::filter([](const auto& lhs) { return lhs != 0.0f; });
// Works just fine
fn_template(v);
fn_template(no_zeros);
// Can't achieve
lambda(v);
lambda(no_zeros);
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... cepts-requ