Странный параметр шаблона шаблона, ожидаемая ошибка
При попытке скомпилировать этот кусок кода:
template <class URNG>
struct Dumb : Brain<Dumb, URNG>
{
Move operator()(const Rat<Dumb, URNG>& rat, URNG&& urng)
{
Move move;
move.x = 1;
move.y = 0;
//rat.look(1, 2);
//rat.getDna(35);
return move;
}
};
clang 3.2.7 поднять, эту странную ошибку я не понимаю:
main.cpp:10:28: error: template argument for template template parameter must be a class template or type alias template
Move operator()(const Rat<Dumb, URNG>& rat, URNG&& urng)
^
Тупой шаблон класса не так ли?
Как спросили в комментариях, вот как выглядит крыса:
template <template <class> class BRAIN, class URNG>
class Rat
{
//...
}
1 ответ
Решение
Ваша проблема из-за введенных имен:
template <class URNG>
struct Dumb : Brain<Dumb, URNG>
{
// in here, "Dumb" refers to the complete type "Dumb<URNG>"
Move operator()(const Rat<Dumb, URNG>& rat, URNG&& urng)
// ^^^^
// really a type, not a template
Чтобы это исправить, вам нужно сослаться на не введенное имя, что вы можете сделать следующим образом:
template <class URNG>
struct Dumb : Brain<Dumb, URNG>
{
Move operator()(const Rat<::Dumb, URNG>& rat, URNG&& urng)
// ^^^^^^
// actual Dumb<T> template, not type