Сабж дополнение: вызов через ссылку на объект в обычной функции, т.е.:
#include <iostream>
template < class T >
struct TClass
{
T t;
template < int arg >
void print_arg() { std::cout << arg << std::endl; }
void test_print() { print_arg<1>(); }
};
template < class T >
void TFunc( TClass<T> & TC )
{
//TC.print_arg<3>(); // line #18
}
int main( void )
{
TClass < void* > TC;
TC.test_print(); // print "1"
TC.print_arg<2>(); // print "2"
TFunc( TC ); // print "3" // line #30
return 0;
}
Так всё прекрасно, но если разкомментировать вызов метода в функции TFunc, то компилер выплёвывает следующее:
ttest.cpp: In function ‘void TFunc(TClass<T>&)’:
ttest.cpp:18: error: expected primary-expression before ‘)’ token
ttest.cpp: In function ‘void TFunc(TClass<T>&) [with T = void*]’:
ttest.cpp:30: instantiated from here
ttest.cpp:18: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator<’
Т.е. здесь он почему-то пытается сравнить функцию с int'овым значением и при этом говорит что перегруженная функция не «разрешена», и как бы я не плясал со скобками и перемещениями шаблонного аргумента, так и не смог заставить его проглотить это. Знает кто-нибудь как это обойти и с чем всё это связано?