CRTC без конструктора по умолчанию

У меня возникли проблемы с выяснением, является ли это проблемой с моим компилятором:

class A
{
public:
    A(int i) {}
};

template <typename T>
class B : public A
{
public:
    B(int i) : A(i) {}
    T test() {return T(10);}
};

class C : public B<C>
{
public:
    C(int i) : B(i) {}
};

int main()
{
    C c(5);
}

ошибка: отсутствует список аргументов для шаблона класса "B"

Этот код правильно компилируется в Visual Studio 2012, но не работает в icpc 9.1 (которую я должен использовать для этого проекта).


person rlbond    schedule 01.07.2015    source источник
comment
Вы имеете в виду C(int i) : B<C>(i) {}   -  person Jarod42    schedule 01.07.2015
comment
@ Jarod42: Это, вероятно, решило бы проблему, но язык этого не требует.   -  person jxh    schedule 01.07.2015
comment
как g++, так и clang++ будет скомпилирован как есть.   -  person NathanOliver    schedule 01.07.2015
comment
Class A можно удалить, верно?   -  person Micha Wiedenmann    schedule 01.07.2015
comment
Кажется, это ошибка компилятора: stackoverflow.com/questions/8887864/   -  person rlbond    schedule 01.07.2015


Ответы (1)


Код правильный.

Возможный обходной путь для icpc — полностью указать базовый класс:

C(int i) : B<C>(i) {}
person Jarod42    schedule 01.07.2015