I seguenti compilazioni in clang ma non in gcc:chiamata di funzione ambigui con due parametri confezioni
template <class... Ts, class... Args>
void f(Ts&&..., Args&&...);
int main()
{
f();
}
Questo è l'errore che ottengo in GCC:
main.cpp: In function 'int main()':
main.cpp:30:7: error: no matching function for call to 'f()'
f();
^
main.cpp:30:7: note: candidate is:
main.cpp:23:6: note: template<class ... Ts, class ... Args> void f(Ts&& ..., Args&& ...)
void f(Ts&&..., Args&&...)
^
main.cpp:23:6: note: template argument deduction/substitution failed:
main.cpp:30:7: note: candidate expects 1 argument, 0 provided
f();
^
Se do un argomento come f(0)
quindi si compila con GCC ma non con Clang.
Errore con clang:
main.cpp:30:5: error: no matching function for call to 'f'
f(0);
^
main.cpp:23:6: note: candidate function not viable: requires 0 arguments, but 1 was provided
void f(Ts&&..., Args&&...)
^
1 error generated.
Se io do lo stesso numero di argomenti espliciti template come parametri di funzione, allora si compila con entrambi i compilatori (cioè f<int, int, int>(0, 0, 0)
).
Non vedo come dovrebbe funzionare. Se chiamate 'f (1, 2, 3, 4)' o anche 'f (1, 2, 3, 4)' - che sono 'Ts' e quali sono' Args' ? Come può il compilatore dire dove iniziano la prima e la seconda? Sono due e due, uno e tre, zero e quattro? –
@IgorTandetnik Non mi aspettavo che qualcuno di loro funzionasse. –
Invia un bug-report "accetta-non valido" a ciascuno. – Deduplicator