is_base_of в параметре шаблона - класс не называет тип

0

Просто интересно, почему я не могу использовать is_base_of в аргументе шаблона C++ следующим образом:

#include <iostream>
#include <type_traits>
using namespace std;

struct base
{
};

struct derived : public base
{
    int value;
};




template<class A, class B, bool isbaseof = std::is_base_of<A,B>::value> myclass
{
    void foo() {
        cout << "Generic..";
    }
};

template<class A, class B> myclass<A,B,true>
{
    void foo() {
        cout << "A is not base of B";
    }
};

int main() {

    return 0;
}

Ошибка:

prog.cpp:17:73: error: ‘myclass does not name a type
 template<class A, class B, bool isbaseof = std::is_base_of<A,B>::value> myclass

Где я ошибаюсь?

Теги:
c++11
templates

1 ответ

8
Лучший ответ

Вы забыли ключ класса:

   template<class A, class B, bool isbaseof = std::is_base_of<A, B>::value>
   struct myclass
// ^^^^^^

(Ключ класса может быть любым class, struct или union.)

  • 1
    И в частичной специализации: template<class A, class B> struct myclass<A,B,true> .
  • 0
    Спасибо! Ошибка была довольно неоднозначной для меня .. Я определенно устал.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню