Шаблоны Variadic с 'const' перегрузка параметров

Сокращенный пример кода:

#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

15
задан Peter Mortensen 20 April 2012 в 15:59
поделиться