为什么这会拒绝枚举?

时间:2010-10-06 04:50:15

标签: c++ c++11

为什么这段代码会失败?

#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?

1 个答案:

答案 0 :(得分:2)

std :: fill在其对象参数的类型上进行参数化;它不需要Iterator :: value_type的参数。因此,正如In silico所说,C ++ 03无法使用本地类型实例化模板。

但是,在C ++ 0x中,您可以使用本地类型来实例化模板,因为它们被赋予外部链接。