模板实例化被函数本地类拒绝

时间:2010-07-30 01:05:48

标签: c++ templates

  

可能重复:
  How to use local classes with templates?

g ++ 4.4拒绝编译对函数本地类作为模板参数的模板函数的调用。像这样:

// Given this:
template <typename C>
int f(const C& c) {
  return c.g();
}

// This compiles fine:
struct C1 {
    int g() const { return 42; }
};

int h1() {
    return f(C1());
}

// But this doesn't:
int h2() {
    struct C2 {
        int g() const { return 42; }
    };
    return f(C2()); // error: no matching function for call to "f(h2()::C2)"
}

// Nor does this:
int h3() {
    struct C3 {
        int g() const { return 42; }
    };
    return f<C3>(C3()); // same error
}

是什么给出的?我该如何工作? (在修剪它的真实程序中,“h”是一个成员函数,“C”必须是一个嵌套类,因此它隐含地是“h”所属类的朋友。)

3 个答案:

答案 0 :(得分:2)

C ++ 0x将删除这种不受欢迎的限制。

现在,您可以使C i 成为一个合适的嵌套类(在h类的内部,而不是在h内。)

答案 1 :(得分:1)

本地类可能不是模板参数。

C++ can local class reference be passed to a function?

答案 2 :(得分:1)

模板参数必须具有外部链接。