// 어떤 container가 가진 type을 알고 싶을 때가 있다.
// 이 문제를 해결하기 위한 STL은 아래의 기법을 사용하고 있다.
template<typename T> class vector
{
public:
        typedef T value_type;
        typedef T* pointer;
        typedef T& reference;
        typedef const T* const_pointer;
};
template<typename T> void foo( T a )
{
        // typeof( a[0] ) n = a[0]; // 다른 언어에서 지원하는 언어 C#
        // a에서 첫번째 요소를 꺼내고 싶다.
        typename T::value_type n = a.front();
}
void main()
{
        vector<double> v(5);
        v[0] = 3.4;
        foo( v );
}