在 C++ Primer 第 5 版第 16 章模板中:
“由模板的提供者确保在使用模板时所有不依赖于模板参数的名称都是可见的。此外,模板提供者必须确保模板的定义,包括模板的定义类模板的成员,在模板实例化时可见。”
但我认为这是一个错误:模板参数上的AFAIK非依赖名称必须在定义模板时可见,而不是在“使用”时可见。
我对么?
这是我的例子:
template <typename T>
void foo(const T& )
{
bar(); // non-dependent name
void do_it(T); // dependent name
}
int main(){}
因此,尽管我没有实例化foo
但没有抱怨声明do_it
只要是从属名称,但代码应该无法编译。
那么这是书上的错字吗?