Folgende compiliert in Klirren aber nicht in gcc:Mehrdeutige Funktionsaufruf mit zwei Parametern Pack
template <class... Ts, class... Args>
void f(Ts&&..., Args&&...);
int main()
{
f();
}
Dies ist der Fehler, den ich in GCC erhalten:
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();
^
Wenn ich gebe ein Argument wie f(0)
dann kompiliert es mit GCC, aber nicht mit Clang.
Fehler mit Klirren:
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.
Wenn ich die gleiche Anzahl von expliziten Template-Argumente als Funktionsparameter geben dann kompiliert es mit beiden Compiler (das heißt f<int, int, int>(0, 0, 0)
).
Ich sehe nicht, wie das funktionieren soll. Wenn Sie 'f (1, 2, 3, 4)' oder sogar 'f (1, 2, 3, 4)' - nennen, die 'Ts' sind und die' Args' sind ? Wie kann der Compiler mitteilen, wo das erste und das zweite Ende beginnen? Sind es zwei und zwei, eins und drei, null und vier? –
@IgorTandetnik Ich habe nicht erwartet, dass einer von ihnen funktioniert. –
Reichen Sie einen Fehlerbericht "accept-invalid" ein. – Deduplicator