История изменений
Исправление fsb4000, (текущая версия) :
Я не знаю что ты делаешь, но я бы делал так.
жалуется об отсутствии версии f без аргументов.
Можешь запретить && (sizeof...(Rest) > 0)
#include <iostream> // fo std::cout
// #include <concepts> // not needed
#include <string> // for std::string
#include <utility> // for std::forward
#include <type_traits> // for std::is_convertible_v
void f(const std::string& first) {
std::cout << first << std::endl;
}
template<typename First, typename... Rest>
requires std::is_convertible_v<First, const std::string&>
&& (std::is_convertible_v<Rest, const std::string&> && ...)
&& (sizeof...(Rest) > 0)
void f(First&& first, Rest&&... rest) {
f(first);
f(std::forward<Rest>(rest)...);
}
int main() {
f("foo", "bar");
}
Исходная версия fsb4000, :
Я не знаю что ты делаешь, но я бы делал так.
жалуется об отсутствии версии f без аргументов.
Можешь запретить && (sizeof...(Rest) > 0)
#include <iostream> // fo std::cout
// #include <concepts> // not needed
#include <string> // for std::string
#include <utility> // for std::forward
#include <type_traits> // for std::is_convertible_v
using namespace std;
void f(const std::string& first) {
std::cout << first << std::endl;
}
template<typename First, typename... Rest>
requires std::is_convertible_v<First, const std::string&>
&& (std::is_convertible_v<Rest, const std::string&> && ...)
&& (sizeof...(Rest) > 0)
void f(First&& first, Rest&&... rest) {
f(first);
f(std::forward<Rest>(rest)...);
}
int main() {
f("foo", "bar");
}