C++03 中禁止将局部类型作为模板参数:
template<typename T>
struct Foo { };
void Make()
{
struct Unknown {};
Foo<Unknown> foo; // Bad
}
标准中是否有任何关于在模板未实例化的情况下检查此规则的指令?
是否可以确定,仅在模板实例化尝试(无实例化 => 编译成功)后才检查此规则?
template<typename T>
struct Foo { };
template<typename T>
void Do(T&) { }
template<typename T>
void Do(T*) // usage with pointer is forbidden by-design
{
struct Unknown {};
Foo<Unknown>::UnknownMethod();
}
int main()
{
std::string s;
Do(s);
}