1.模板实例化(instantiated)的两个层次,声明和使用时的定义检查,参数依赖内容只做声明检查
// details/lazy.cpp
template <typename T>
class Safe {
};
template <int N>
class Danger {
public:
typedef char Block[N]; // would fail for N<=0
};
template <typename T, int N>
class Tricky {
public:
virtual ~Tricky() {
}
void no_body_here(Safe<T> = 3);
void inclass() {
Danger<N> no_boom_yet;
}
// void error() { Danger<0> boom; }
// void unsafe(T (*p)[N]);
T operator->();
// virtual Safe<T> suspect();
struct Nested {
Danger<N> pfew;
};
union { // anonymous union
int align;
Safe<T> anonymous;
};
};
int main()
{
Tricky<int, 0> ok;
}