clang ++ não aceitando o uso do parâmetro modelo de modelo ao usar o CRTP
Estou recebendo erros de compilação ao tentar chamar o construtor de classe base na lista de inicialização derivada ao usar um parâmetro de modelo de modelo com CRTP.
O problema pode ser replicado com este trecho de código:
template <template<class> class Derived, class T>
struct base
{
};
template <class T>
struct derived : public base<derived, T>
{
derived()
: base<derived, T>()
{ }
};
A mensagem de erro ofensiva:
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.
Esse problema só parece acontecer no clang (3.4), não no g ++ (4.8, 4.7, 4.6). Eu estou compilando com -std = c ++ 11 também.
Esta é a primeira vez que eu precisei usar o CRTP com o parâmetro template template. Estou fazendo isso bem e é um problema com o clang ++ ou não?
Eu cresci a confiar em mensagens de erro clang ++ mais do que g + + de tarde!