#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;
}