#include <iostream>
#include <string>
template <typename T, typename F>
void print(T t, F transformer){
transformer(t);
std::cout << t << std::endl;
}
template <typename T>
void print(T t){
std::cout << t<<std::endl;
}
template <typename... Params>
void printLabeled(std::string label, Params&&... params){
std::cout << label << ": ";
print(std::forward<Params>(params)...);
}
int main() {
//prints the number '1', as expected
print(1);
//prints the number the label "answer" and then the number one
printLabeled("answer",1);
//This does was the above line was intended to do
print(1, [](int& num){num+=1;});
//I intended this to be the labeled version of the above line,
//but for some reason, this doesn't work anymore
printLabeled("answer", 1, [](int& num){num+=1;});
return 0;
}
CSNpbmNsdWRlIDxpb3N0cmVhbT4KCSNpbmNsdWRlIDxzdHJpbmc+CgkgCgl0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRj4KCXZvaWQgcHJpbnQoVCB0LCBGIHRyYW5zZm9ybWVyKXsKCQl0cmFuc2Zvcm1lcih0KTsKCQlzdGQ6OmNvdXQgPDwgdCA8PCBzdGQ6OmVuZGw7Cgl9CgkgCgl0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KCXZvaWQgcHJpbnQoVCB0KXsKCQlzdGQ6OmNvdXQgPDwgdDw8c3RkOjplbmRsOwoJfQoJIAoJdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFBhcmFtcz4KCXZvaWQgcHJpbnRMYWJlbGVkKHN0ZDo6c3RyaW5nIGxhYmVsLCBQYXJhbXMmJi4uLiBwYXJhbXMpewoJCXN0ZDo6Y291dCA8PCBsYWJlbCA8PCAiOiAiOwoJCXByaW50KHN0ZDo6Zm9yd2FyZDxQYXJhbXM+KHBhcmFtcykuLi4pOwoJfQoJIAoJaW50IG1haW4oKSB7CgkJLy9wcmludHMgdGhlIG51bWJlciAnMScsIGFzIGV4cGVjdGVkCgkJcHJpbnQoMSk7CgkgCgkJLy9wcmludHMgdGhlIG51bWJlciB0aGUgbGFiZWwgImFuc3dlciIgYW5kIHRoZW4gdGhlIG51bWJlciBvbmUKCQlwcmludExhYmVsZWQoImFuc3dlciIsMSk7CgkgCgkJLy9UaGlzIGRvZXMgd2FzIHRoZSBhYm92ZSBsaW5lIHdhcyBpbnRlbmRlZCB0byBkbwoJCXByaW50KDEsIFtdKGludCYgbnVtKXtudW0rPTE7fSk7CgkgCgkJLy9JIGludGVuZGVkIHRoaXMgdG8gYmUgdGhlIGxhYmVsZWQgdmVyc2lvbiBvZiB0aGUgYWJvdmUgbGluZSwKCQkvL2J1dCBmb3Igc29tZSByZWFzb24sIHRoaXMgZG9lc24ndCB3b3JrIGFueW1vcmUKCQlwcmludExhYmVsZWQoImFuc3dlciIsIDEsIFtdKGludCYgbnVtKXtudW0rPTE7fSk7CgkgCgkJcmV0dXJuIDA7Cgl9Cg==