La parentesi vuota (()
) renderà una dichiarazione di funzione solo se è scritta come tale nel codice sorgente.
§14.5.3 [temp.variadic] p6
cita anche questo:
L'istanziazione di un pacchetto di espansione che non è un sizeof ... espressione produce un elenco E1, E2, ..., EN, dove N è il numero di elementi nei parametri di espansione della confezione. [...] Quando N è zero, l'istanziazione dell'espansione produce una lista vuota. Tale istanziazione non altera l'interpretazione sintattica del costrutto di inclusione, anche nei casi in cui l'omissione della lista interamente sarebbe altrimenti mal formata o si tradurrebbe in un'ambiguità nella grammatica. [Esempio:
template<class... T> struct X : T... { };
template<class... T> void f(T... values) {
X<T...> x(values...);
}
template void f<>(); // OK: X<> has no base classes
// x is a variable of type X<> that is value-initialized
-end esempio]
Vedere in particolare il secondo commento nel codice di esempio.
ohh come potrei averlo perso! Grazie :-) –