Reduzierte Beispielcode Überlastung:Variadische Vorlagen mit 'const' Parameter
#include <iostream>
template<typename T>
void func(T &x)
{
std::cout << "non-const " << x << std::endl;
}
template<typename T>
void func(const T &x)
{
std::cout << "const " << x << std::endl;
}
template<typename ...ARGS>
void proxy(ARGS ...args)
{
func(args...);
}
int main()
{
int i = 3;
func(i);
func(5);
func("blah");
proxy(i);
proxy(5);
proxy("blah");
}
Erwartete Ausgabe:
non-const 3
const 5
const blah
non-const 3
const 5
const blah
tatsächliche Ausgang:
non-const 3
const 5
const blah
non-const 3
non-const 5
non-const blah
also irgendwie die const
Qualifier der Funktion Der Parameter geht verloren, wenn er durch die Variadic-Vorlage gesetzt wird. Warum? Wie kann ich das verhindern?
PS: getestet mit GCC 4.5.1 und SUSE 11,4
Es hat nichts mit variadischen Vorlagen zu tun. Die Parameter Ihres Funktionsschablonen-Proxys sind keine Referenzen, daher wird das const der Funktionsargumente beim Ableiten der Vorlagenargumente ignoriert. – Cosyn