No es posible. La Norma también tiene una nota al respecto en 14.8.1/7
[Nota: debido a que la lista de argumentos de plantilla explícita sigue al nombre de plantilla de función, y debido a las plantillas de función miembro de conversión y plantillas de función miembro de constructor se llama sin necesidad de utilizar un nombre de función, no hay forma de proporcionar una lista explícita de argumentos de plantilla para estas plantillas de funciones. ]
Si se puede vivir con ella, se puede trabajar en torno
struct T {
template<class U> T(identity<U>);
};
struct U {
U() : t(identity<void>()) {}
T t;
};
Dada identity
como que es definido en impulso
template<typename T> struct identity { typedef T type; };
agradecimiento you.no es problema, puedo solucionar este – Anycorn
@litb: ¿Sabe si hay algún motivo por el que simplemente no le permitan llamar explícitamente a T :: T()? –
@JosephGarvin sospecho que 'T()' funciona teniendo el objeto antes del paréntesis como un tipo, 'Type()' construye un objeto temporal. Esto es incompatible con 'T :: T()' donde lo que está antes de los parens es una función. El significado de eso es llamar a la función nombrada. Pero llamar directamente a un constructor no tiene sentido, al menos requeriría una redacción adicional para que funcione y haga lo esperado. –