为什么这段代码会失败?
#include <algorithm>
int main() {
int a[10];
enum { a_size = sizeof a / sizeof *a };
std::fill(a, a + a_size, a_size);
}
G ++ 4.1.2和4.4.3:
在函数'int main()'中:
第5行:错误:没有匹配函数来调用'fill(int [10],int *,main()::&lt; anonymous enum&gt;)'
此代码是否有效C ++ 0x?
答案 0 :(得分:2)
std :: fill在其对象参数的类型上进行参数化;它不需要Iterator :: value_type的参数。因此,正如In silico所说,C ++ 03无法使用本地类型实例化模板。
但是,在C ++ 0x中,您可以使用本地类型来实例化模板,因为它们被赋予外部链接。