#include <iostream>
using namespace std;
// typename 문법이야기
// 1.2 의 중복문제가 발생해서 이를 해결하고자 typename 키워드를 만들었다.
// 그러고 보니 class T 라는 것의 의미가 명확하지가 않는 것을 알 수가 있었다.
// class T는 int와 같은 타입도 받을 수 있기 때문에 typname으로 바뀌게 된 것이다.!!!
// 하지만 class는 여전히 지원된다.
template<typename T> void foo( T a )
{
typename T::B* p;
// 1. T안에 내포클래스로 B가 있는데 그 포인터 p를 선언.
// 2. T안에 B라는 static 변수가 있는데 곱하기 p를 한다.
}
class A
{
public:
static int B;
class B
{
};
};
void main()
{
A a;
foo( a );
}
////////////////////////////////////////////////////////////////////
// 디폴트 인자
template<typename T = int, int n = 10> class Stack
{
T buf[n];
};
void main()
{
Stack<int, 10> s;
Stack<int> s2;
stack<> s3; // 모두 default 사용
}