Почему не работает этот простой код?
template<class U>
class retype
{
typedef U type;
};
class object
{
public:
template<class U>
int create(typename retype<U>::type p)
{
return 4;
}
};
int main()
{
int n = object().create(5);
return 0;
}
Получаю такую ошибку при компиляции GCC:
test.cpp: In function ‘int main()’:
test.cpp:20: error: no matching function for call to ‘object::create(int)’
В чем может быть проблема?
Здравствуйте, gcooler, Вы писали:
G>G>template<class U>
G>class retype
G>{
G> typedef U type;
G>};
G>
G>В чем может быть проблема?
Компилятор не может из того, что retype<U>::type — int, вывести U. Тем более, что в общем случае эта задача нерешаема: вдруг у тебя рядом найдется template<> class retype<char> { typedef int type; };?