Giảm mẫu mã:variadic mẫu với tham số 'const' quá tải
#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");
}
sản lượng dự kiến:
non-const 3
const 5
const blah
non-const 3
const 5
const blah
đầu ra thực tế:
non-const 3
const 5
const blah
non-const 3
non-const 5
non-const blah
Vì vậy, bằng cách nào đó const
vòng loại của hàm tham số bị mất khi đặt qua mẫu variadic. Tại sao? Làm thế nào tôi có thể ngăn chặn điều này?
PS: thử nghiệm với GCC 4.5.1 và SUSE 11,4
Nó không có gì để làm với các mẫu variadic. Các tham số của mẫu chức năng của bạn không tham chiếu, do đó, const của các đối số hàm bị bỏ qua khi suy luận các đối số mẫu. – Cosyn