Мне удалось сжать мою путаницу до следующего кода:
template<typename T>
class BTI {
public:
char func(char);
};
template<int i>
class Tag {};
template<int i> unsigned char
BTI<Tag<i> >::func(char c) {
return c;
}
Это предназначено для:
- Объявить шаблон класса
BTI
,
- Объявите шаблонный класс тегов
Tag
и
- Предоставляет специализированную реализацию шаблона
func
, когда параметр шаблона BTI
имеет значение Tag<i>
.
Когда я запускаю это через g++ -fsyntax-only
(используя g ++ 4.1.2.), Я получаю:
test.cc:11: error: invalid use of undefined type ‘class BTI<Tag<i> >’
test.cc:2: error: declaration of ‘class BTI<Tag<i> >’
test.cc:11: error: template definition of non-template ‘unsigned char BTI<Tag<i> >::func(char)’
Я даже не уверен, что попробовать на этом этапе. Есть идеи?