代码之家  ›  专栏  ›  技术社区  ›  Roger Pate

为什么拒绝枚举?

  •  3
  • Roger Pate  · 技术社区  · 15 年前

    为什么这个代码会失败?

    #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():<anonymous enum>”)

    这个代码有效吗?C++ 0x?

    1 回复  |  直到 15 年前
        1
  •  2
  •   steffenj    15 年前

    std::fill根据其对象参数的类型进行参数化;它不需要Iterator::value_类型的参数。因此,正如在Simo中所说的,C++ 03不能用本地类型实例化模板。

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