#include <iostream>
template<typename T>
void foo(T a)
{
std::cout << " : " << a << std::endl;
}
void bar() {}
template<typename T>
void bar(T &&arg) {
foo(std::forward<T>(arg));
}
template<typename T, typename... Args>
void bar(T &&arg, Args&&... args) {
foo(std::forward<T>(arg));
bar(std::forward<Args>(args)...);
}
int main(int argc, char const *argv[])
{
bar(1, "{2}",3.14, "[4]");
return 0;
}
g++ -std=c++11 -O2 t.cpp -o t.bin
: 1
: {2}
: 3.14
: [4]
ну.. это всё заменяется
template<typename T>
void foo(T a)
{
std::cout << " : " << a << std::endl;
}
template<typename... Args>
void bar(Args... args) {
int _[] { (foo(args), 0)... };
}
int main(int argc, char const *argv[])
{
bar(1, "{2}",3.14, "[4]");
return 0;
}
Да и форвард нет смысла юзать, если && не прописывать.
Александр
Maksim
Konstantin
🐙 Antony
Alexey
FailsBot
🦥Alex Fails
Valeriy
Nikolai
Anton
Fo
Dr. Friedrich
Berkus