#include <iostream>
#include <vector>
using namespace std;
// template 파라미터의종류
// 1. type
// 2. 상수( 정수와포인터상수만가능) 파라미터.
// 3. template temlpate 파라미터- template 이름을 넘긴다???
// vector는 디폴트 인자가3 개가 있으므로 넘기기 힘들다.
// 그래서 새롭게 만든 template를 넘겨보자!! VECTOR
template<typename T> class VECTOR
{
};
template<template<typename> class A, typename T> class Stack
{
        A<T> v;
public:
};
int main()
{
        Stack<VECTOR, int> s;
        return 0;
}
//////////////////////////////////////////////////////////////////// 
template <typename T, int n, template<typename> class A> class Stack
{
        A<T> v;                // 결국 vector<int> v
        T buf[n];              // 배열첨자에 템플릿인자 상수는 가능하다.
};
void main()
{
        vector<int> a;
        vector b;
        Stack<int, 10, vector> s;
        int n = 10;
        //Stack<int, n> s2;    // error
}
////////////////////////////////////////////////////////////////////  
// 클래스template 2
typedef vector<vector<int> > Matrix;
void main()
{
        //vector<vector<int> > m(3, 3);
        Matrix m(3, 3);
        
        m[0][0] = 10;
        
        vector<int> v(10, 3);
        v[0] = 10;
}
//////////////////////////////////////////////////////////////////// 
template<typename T> class Stack
{
};
void main()
{
        Stack<int> s;
        Stack<Stack<int> > s2; // >> 와 혼동 되지 않도록 해야 한다.
}