#include <iostream>
#include <string>
#include <vector>
template<typename First, typename... Args>
void Print(First first, Args... args){
std::cout<<first<<std::endl;
if constexpr (sizeof...(args)> 0) {
Print(args...);
}
}
template<typename... Args>
void Double(Args... args){
Print(args+args...);
}
template<std::size_t V=1, typename... Args>
void DoubleOne(Args... args){
Print(args+V ...);
}
void Test(){
Double(1,2,3,4);
Double(std::string("hello"), std::string("world"));
DoubleOne<10>(1,2,3,4);
}
template<typename First, typename... Args>
constexpr bool CheckIsSameType(First, Args...) {
return (std::is_same<First, Args>::value && ...);
}
void Test1(){
std::cout<<std::boolalpha<<CheckIsSameType(1,2,3,4)<<std::endl;
std::cout<<std::boolalpha<<CheckIsSameType(1,2,3,4.0)<<std::endl;
std::cout<<std::boolalpha<<CheckIsSameType("hello", " ", "world", "!")<<std::endl;
}
int main()
{
Test();
Test1();
}