Допустим, у меня есть
template <typename T>
class F;
. Я могу создать другой шаблон, который принимает F
в качестве типа, с настройками по умолчанию и специализацией.G<F<int> > g_of_f
.Компилятор правильно выбирает специализацию G
, и все отлично.
Так что вот моя проблема.Я хочу сделать это с более чем одним типом шаблона в списке.Но когда я пытаюсь
template <typename U, typename S>
class H;
template <typename U>
template <typename T>
class H <U, F<T> >
{
};
, теперь не могу создать экземпляр H<void, F<int> > h_of_f
, потому что компилятор выбирает оригинальный шаблон H
, а не специализацию.
Я наблюдал то жес g ++ 4.1 и g ++ 4.4.
Какая разница между G
и H
, которая мешает компилятору работать так, как я ожидаю?