Non è possibile. Lo Standard ha anche una nota su questo a 14.8.1/7
[Nota: perché l'elenco modello argomento esplicito segue il nome del modello di funzione, e poiché i modelli di funzione di membro di conversione e modelli di funzione membro costruttore sono chiamati senza l'utilizzo di un nome di funzione, non è possibile fornire un elenco di argomenti del modello esplicito per questi modelli di funzione. ]
Se si può vivere con esso, si può lavorare intorno
struct T {
template<class U> T(identity<U>);
};
struct U {
U() : t(identity<void>()) {}
T t;
};
Dato identity
come è definito nella spinta
template<typename T> struct identity { typedef T type; };
fonte
2010-05-07 07:38:01
ringraziamento you.no disperatevi, posso lavorare intorno a questo – Anycorn
@litb: Sai se c'è qualche ragione per cui semplicemente non ti permettono di chiamare esplicitamente T :: T()? –
@JosephGarvin sospetto perché 'T()' funzioni avendo la cosa prima che la parentesi sia di tipo, 'Type()' costruisce un oggetto temporaneo. Questo è incompatibile con 'T :: T()' dove la cosa prima del paren è una funzione. Il significato di ciò è chiamare la funzione indicata. Ma chiamare direttamente un costruttore non ha senso, per lo meno richiederebbe una formulazione aggiuntiva per farlo funzionare e fare la cosa che ci si aspetta. –