#include <iostream>
#include <vector>
#include <map>
template <class T>
void foo(const T& t)
{
static_assert( sizeof( T ) > 0, "Unknown container");
}
template <class A, class B>
void foo( const std::vector<A,B> & v)
{
std::cout << v.size() << std::endl;
}
template <class A, class B, class C, class D>
void foo( const std::map<A,B,C,D> & v)
{
std::cout << v.size() << std::endl;
}
int main()
{
std::vector<int> v = { 1, 2, 3 };
foo(v);
std::map<int,int> v2 = { {1,2},{3,4} };
foo(v2);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWFwPgoKCnRlbXBsYXRlIDxjbGFzcyBUPgp2b2lkIGZvbyhjb25zdCBUJiB0KQp7CglzdGF0aWNfYXNzZXJ0KCBzaXplb2YoIFQgKSA+IDAsICJVbmtub3duIGNvbnRhaW5lciIpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzIEI+CnZvaWQgZm9vKCBjb25zdCBzdGQ6OnZlY3RvcjxBLEI+ICYgdikKewoJc3RkOjpjb3V0IDw8IHYuc2l6ZSgpIDw8IHN0ZDo6ZW5kbDsKfQoKdGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIEMsIGNsYXNzIEQ+CnZvaWQgZm9vKCBjb25zdCBzdGQ6Om1hcDxBLEIsQyxEPiAmIHYpCnsKCXN0ZDo6Y291dCA8PCB2LnNpemUoKSA8PCBzdGQ6OmVuZGw7Cn0KCgppbnQgbWFpbigpCnsKCXN0ZDo6dmVjdG9yPGludD4gdiA9IHsgMSwgMiwgMyB9OwoJZm9vKHYpOwoJc3RkOjptYXA8aW50LGludD4gdjIgPSB7IHsxLDJ9LHszLDR9IH07Cglmb28odjIpOwoKCXJldHVybiAwOwp9