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”所属类的朋友。)
答案 0 :(得分:2)
C ++ 0x将删除这种不受欢迎的限制。
现在,您可以使C i 成为一个合适的嵌套类(在h
类的内部,而不是在h
内。)
答案 1 :(得分:1)
答案 2 :(得分:1)
模板参数必须具有外部链接。