¿Se pueden especificar explícitamente los parámetros de plantilla de un constructor?

Un constructor de una clase puede ser una función de plantilla. En el punto en el que se llama a un constructor de este tipo, el comstackdor normalmente examina los argumentos dados al constructor y determina los parámetros de plantilla usados ​​a partir de ellos. ¿También hay alguna syntax para especificar los parámetros de la plantilla explícitamente?

Un ejemplo artificial:

struct A { template A() {} }; 

¿Hay alguna manera de instanciar esta clase? ¿Cuál es la syntax para especificar explícitamente los parámetros de la plantilla del constructor?

Mi caso de uso sería un problema si el comstackdor no parece encontrar el constructor con plantilla correcto. Especificar explícitamente los parámetros de la plantilla probablemente generaría más mensajes de error útiles o incluso resolvería el problema.

No. El estándar C ++ 03 dice:

[Nota: debido a que la lista explícita de argumentos de la plantilla sigue el nombre de la plantilla de función, y debido a que las plantillas de funciones miembro de conversión y las plantillas de funciones miembro constructor se llaman sin utilizar un nombre de función, no hay forma de proporcionar una lista explícita de argumentos de plantilla para estas plantillas de función. ] (§14.5.2 / 5)

Hay otra solución para transferir información de tipo a constructores con plantilla que no puede tomar un valor de este tipo como argumento:

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

Editar:

Tenga en cuenta: A a(id()); no funcionará, debido al análisis más molesto. Sería interpretado como una statement de función. Vea esta pregunta para una explicación más detallada.

no, no puedes instanciar esa clase usando ese constructor. PERO:

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

Ahora usted puede.