#include <iostream>using namespace std;template<typename T>void print_comma_separated_list(const T& value) { std::cout<<value<<std::endl;}template<typename First,typename ... Rest>void print_comma_separated_list(const First& first,Rest ... rest) { std::cout<<first<<","; print_comma_separated_list(rest...);}int main(){ print_comma_separated_list(42,"hello",2.3,'a'); print_comma_separated_list("hello",2.3,'a'); print_comma_separated_list(2.3,'a'); print_comma_separated_list('a'); return 0;}
#include <stdexcept>#include <iostream>using namespace std; void mprintf(const char* s) { while (*s) { if (*s == '%' && *(++s) != '%') throw std::runtime_error("invalid format string: missing arguments"); std::cout << *s++; } } template<typename T, typename... Args> void mprintf(const char* s, T value, Args... args) { while (*s) { if (*s == '%' && *(++s) != '%') { std::cout << value; mprintf(s, args...); // call even when *s == 0 to detect extra arguments return; } std::cout << *s++; } throw std::logic_error("extra arguments provided to printf"); } int main(int argc, char** argv) { std::string s("test"); std::string s2("test2"); mprintf("% - %", s, s2); return 0; }