Я получаю ошибки компиляции при попытке вызвать конструктор базового класса в производном списке инициализации при использовании параметра шаблона шаблона с помощью CRTP.clang ++ не принимает использование параметра шаблона шаблона при использовании CRTP
Проблема может быть воспроизведен с этим фрагментом кода:
template <template<class> class Derived, class T>
struct base
{
};
template <class T>
struct derived : public base<derived, T>
{
derived()
: base<derived, T>()
{ }
};
messsage ошибка обижая:
bug.cpp:10:16: error: template argument for template template parameter must be a class template or type alias template
: base<derived, T>()
^
bug.cpp:10:11: error: expected class member or base class name
: base<derived, T>()
^
bug.cpp:10:11: error: expected '{' or ','
3 errors generated.
Эта проблема появляется только произойдет на лязгом (3.4), а не g ++ (4.8, 4.7, 4.6). Я также компилирую с -std = C++ 11.
Это первый раз, когда мне нужно было использовать CRTP с параметром шаблона шаблона. Я делаю это хорошо, и это проблема с clang ++ или нет?
Я вырос, чтобы доверять clang ++ сообщения об ошибках больше, чем g ++ в последнее время!
+1 Не знаю, что это изменилось в C++ 11. Возможно, вы захотите предоставить обходной путь, который был у меня в удаленном ответе. –
@ DavidRodríguez-dribeas: не стоит беспокоиться, новый стандарт все еще меня удивляет. –
Я не волнуюсь, наоборот, я чему-то научился. Я был бы взволнован в тот день, когда не узнаю ничего нового :) –