Пытаюсь создать функцию с переменным числом аргументов типобезопасным способом с помощью шаблонов.
#include <iostream>
#include <concepts>
template<typename First, typename... Rest>
requires std::is_convertible_v<First, const std::string&> && (std::is_convertible_v<Rest, const std::string&> && ...)
void f(First &&first, Rest&&... rest) {
f(first);
f(std::forward(rest)...);
}
template<>
void f(const std::string &first) {
std::cout << first << std::endl;
}
int main() {
f("foo", "bar");
}
Однако компилятор игнорирует специализацию f и жалуется об отсутствии версии f без аргументов.
Перемещено hobbit из general