Parâmetros de modelo e modelos variados com o gcc 4.4
Estou usando o gcc 4.4 no Debian squeeze. Considere o seguinte código.
#include <map>
#include <string>
using std::map;
using std::string;
// Args lets the user specify additional explicit template arguments
template <typename T,
template <typename T, typename... Args> class C,
typename... Args>
C<T, Args...> foo()
{
C<T, Args...> x;
return x;
}
int main(void)
{
map<string, int> a = foo<string, map, int>();
}
Então, a idéia aqui é queT
partidasstring
, C
partidasmap
e o pacote de parâmetros do modeloArgs
partidasint
. Eu posso ter algumas sintaxes incorretas, por favor, corrija se sim. Em particular, se alguém quiser o primeiro argumento do modelo emclass C
para combinarT
e o restante para corresponder ao pacote de parâmetros do modeloArgs
, étemplate <typename T, typename... Args> class C
a sintaxe correta?
Isso dá o erro
In function 'int main()':
post.cc:18: error: no matching function for call to 'foo()'
Este parece ser semelhante à pergunta Modelos de modelos variados e encaminhamento perfeito. Essa pergunta sugere que esse é um bug do gcc, mas talvez eu esteja errado ao pensar que essas perguntas são sobre a mesma cois
Por favor, seja gentil. Meu conhecimento de modelos variados tem menos de 12 horas; Eu estava apenas tentando reescrever algum código C ++ antigo para reduzir a duplicação. Também já faz um tempo desde que eu fiz qualquer C ++. Se houver uma solução alternativa, entre em contato. Obrigado
EDIT: a solução sugerida nos comentários de Modelos de modelos variados e encaminhamento perfeito porIse Wisteria trabalhou para mim, o que sugere que este é o mesmo bug. Claro, agora estou (a) imaginando quão frágil é essa solução alternativa e (b) por que ela funciona e o que motivou Ise a pensar nela. Embora eu ache que apenas Ise possa responder a última parte. : -)