in C++ è ok per avere un funcction che prende una funzione di tipo locale:Perché i modelli non possono utilizzare i tipi locali?
int main() {
struct S { static void M(const S& s) { } };
S s;
S::M(s);
}
ma non OK per avere un modello che fa:
template<typename T> void Foo(const T& t) { }
int main() {
struct S { } s;
Foo(s); // Line 5: error: no matching function for call to 'Foo(main()::S&)'
}
14.3.1 paragraph 2 in the c++ standard.
Un tipo senza collegamento [...] non deve essere usato come argomento modello per un parametro tipo di modello
Perché C++ non lo consente?
La migliore spiegazione che ho sentito finora è che i tipi di interni non hanno alcun legame e che questo potrebbe implicare che una funzione che li prende come un ARG deve avere alcun legame. Ma non c'è motivo per cui possa vedere che un modello di istanziazione deve avere un collegamento.
p.s. Si prega di non dire semplicemente "thats not allowed because the standard says it's not"
Non c'è una buona ragione, e C++ 0x rimuoverà questa restrizione (ma non quella collegata in p.s .; non ho ancora idea del perché non sia permesso). –
@Mike; Breve e dritto al punto! – BCS