следующий код:
using namespace std;
template <typename X>
class Goo {};
template <typename X>
class Hoo {};
template <class A, template <typename> class B = Goo >
struct Foo {
B<A> data;
void foo1();
void foo2();
};
template <typename A>
void Foo<A>::foo1() { cout << "foo1 for Goo" << endl;}
int main() {
Foo<int> a;
a.foo1();
}
выдает ошибку компилятора:
test.cc:18: error: invalid use of incomplete type 'struct Foo<A, Goo>'
test.cc:11: error: declaration of 'struct Foo<A, Goo>'
Почему я не могу частично специализировать foo1 ()? Если это не так, как мне это сделать?
У меня другой вопрос: что если я хочу, чтобы foo2 () определялась только для A = int, B = Hoo
а не для какой-либо другой комбинации, как мне это сделать?