[C++] Как сделать Type -> const Type & в parameters pack?
Можно как-нибудь обойти?вопрос не понял, но накину идею с rvalue-ref + perfect forward
пример: http://ideone.com/JRftc8
test(a, b, a, b, 10);
компилится и выдает результат:
false
true
false
true
true
#include <iostream>
#include <ios>
#include <type_traits>
#include <utility>
using namespace std;
template <typename T>
void test_impl(T&)
{
cout << "false" << endl;
}
template <typename T>
void test_impl(const T&)
{
cout << "true" << endl;
}
void test() {}
template<typename Arg, typename... Args> void test(Arg&& a, Args&& ... as) {
test_impl(std::forward<Arg>(a));
test(std::forward<Args>(as)...);
}
int main() {
int a;
const int b = 10;
std::cout << std::boolalpha;
//test(a, b, a, b); // this prints "false\ntrue\nfalse\ntrue\n"
test(a, b, a, b, 10); // this prints "false\ntrue\nfalse\ntrue\ntrue"
}
Спасибо, шаманы.
не благодари )
Оставить комментарий
apl13
Проблема в предпоследней строчке. 10 типизируется как int, и поэтому не получается правильной перегрузки. Люди, привыкшие писать const & везде, где можно, даже не обращают внимания на то, что это неявное преобразование. А тут не получается.
Можно как-нибудь обойти?
ЗЫ. gcc 4.7.2.