#include <iostream>
#include <vector>
#include <list>
template <bool C, template <typename...> class A, template <typename...> class B>
struct If
{
template <typename... AArgs>
using Type = A<AArgs...>;
};
template <template <typename...> class A, template <typename...> class B>
struct If<false, A, B>
{
template <typename... BArgs>
using Type = B<BArgs...>;
};
int main()
{
If<true, std::vector, std::list>::Type<int> ct = { 23, 42 };
If<false, std::vector, std::list>::Type<double> cf = { 3.14159, 13.37 };
for (auto i : ct)
std::cout << i << "\n";
for (auto d : cf)
std::cout << d << "\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bGlzdD4KCnRlbXBsYXRlIDxib29sIEMsIHRlbXBsYXRlIDx0eXBlbmFtZS4uLj4gY2xhc3MgQSwgdGVtcGxhdGUgPHR5cGVuYW1lLi4uPiBjbGFzcyBCPgpzdHJ1Y3QgSWYKewoJdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFBcmdzPgoJdXNpbmcgVHlwZSA9IEE8QUFyZ3MuLi4+Owp9OwoKdGVtcGxhdGUgPHRlbXBsYXRlIDx0eXBlbmFtZS4uLj4gY2xhc3MgQSwgdGVtcGxhdGUgPHR5cGVuYW1lLi4uPiBjbGFzcyBCPgpzdHJ1Y3QgSWY8ZmFsc2UsIEEsIEI+CnsKCXRlbXBsYXRlIDx0eXBlbmFtZS4uLiBCQXJncz4KCXVzaW5nIFR5cGUgPSBCPEJBcmdzLi4uPjsKfTsKCmludCBtYWluKCkKewoJSWY8dHJ1ZSwgc3RkOjp2ZWN0b3IsIHN0ZDo6bGlzdD46OlR5cGU8aW50PiBjdCA9IHsgMjMsIDQyIH07CglJZjxmYWxzZSwgc3RkOjp2ZWN0b3IsIHN0ZDo6bGlzdD46OlR5cGU8ZG91YmxlPiBjZiA9IHsgMy4xNDE1OSwgMTMuMzcgfTsKCQoJZm9yIChhdXRvIGkgOiBjdCkKCQlzdGQ6OmNvdXQgPDwgaSA8PCAiXG4iOwoJZm9yIChhdXRvIGQgOiBjZikKCQlzdGQ6OmNvdXQgPDwgZCA8PCAiXG4iOwoJCglyZXR1cm4gMDsKfQ==