Можно создать дубликат:
How to use local classes with templates?Шаблон конкретизации отказался с функцией локального класса
г ++ 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».)
Спасибо за обходной путь. Это печально, потому что «С» используется только в одном месте, но по крайней мере мне не нужно публиковать вещи, которых не должно быть. – zwol