Os parâmetros de modelo de um construtor podem ser explicitamente especificados?

Um construtor de uma class pode ser uma function de modelo. No ponto em que tal construtor é chamado, o compilador geralmente analisa os argumentos dados ao construtor e determina os parâmetros de modelo usados ​​a partir deles. Existe alguma syntax para especificar os parâmetros do modelo explicitamente?

Um exemplo inventado:

struct A { template A() {} }; 

Existe uma maneira de instanciar essa class? Qual é a syntax para especificar explicitamente os parâmetros do modelo do construtor?

Meu caso de uso seria um problema se o compilador não parece encontrar o construtor de modelo correto. A especificação explícita dos parâmetros do modelo provavelmente geraria mensagens de erro mais úteis ou até mesmo resolveria o problema.

Não. O padrão C ++ 03 diz:

[Nota: como a lista explícita de argumentos de modelo segue o nome do modelo de function e como modelos de function de membro de conversão e modelos de function de membro construtor são chamados sem usar um nome de function, não é possível fornecer uma lista de argumentos de modelo explícita para esses modelos de function. ] (§14.5.2 / 5)

Há outra solução para transferir informações de tipo para construtores de modelo que não podem ter um valor desse tipo como um argumento:

 template struct id {}; struct A { template A(id); }; A a=id(); 

Editar:

Por favor note: A a(id()); não vai funcionar, por causa da análise mais vexatória. Isso seria interpretado como uma declaração de function. Veja esta questão para mais explicações.

não, você não pode instanciar essa class usando esse construtor. MAS:

 struct A { template < typename T > A(T const&); }; 

Agora você pode.