Сокращенный пример кода:
#include
template
void func(T &x)
{
std::cout << "non-const " << x << std::endl;
}
template
void func(const T &x)
{
std::cout << "const " << x << std::endl;
}
template
void proxy(ARGS...args)
{
func(args...);
}
int main()
{
int i = 3;
func(i);
func(5);
func("blah");
proxy(i);
proxy(5);
proxy("blah");
}
Ожидаемый вывод:
non-const 3
const 5
const blah
non-const 3
const 5
const blah
Фактический вывод:
non-const 3
const 5
const blah
non-const 3
non-const 5
non-const blah
Итак, каким-то образом квалификатор const
параметра функции теряется при прохождении через вариативный шаблон. Почему? Как я могу предотвратить это?
PS:протестировано с GCC 4.5.1 и SUSE 11.4