E
er
Hello, I'm hoping someone could explain the part next to the comment
"How so?!" below. Thanks.
#include <iostream>
template<typename...Args> void f(Args&...){}
template<typename U, typename...Args>
void f(U& u, Args&... args){
std::cout << "lvalue, ";
f(args...);
}
template<typename U, typename...Args>
void f(U const& u, Args&... args){
std::cout << "clvalue, ";
f(args...);
}
template<typename...Args>
void g(Args&...args)
{
f(args...);
}
template<typename...Args>
void h(Args const&...args)
{
f(args...);
}
int main()
{
int a = 1;
int const b = 2;
{
g(a, a); std::cout << std::endl;
// lvalue, lvalue // OK
}
{
g(a, b);
std::cout << std::endl;
// lvalue, lvalue // How so?!
}
{
h(a, a);
std::cout << std::endl;
// clvalue, clvalue // OK
}
return 0;
}
"How so?!" below. Thanks.
#include <iostream>
template<typename...Args> void f(Args&...){}
template<typename U, typename...Args>
void f(U& u, Args&... args){
std::cout << "lvalue, ";
f(args...);
}
template<typename U, typename...Args>
void f(U const& u, Args&... args){
std::cout << "clvalue, ";
f(args...);
}
template<typename...Args>
void g(Args&...args)
{
f(args...);
}
template<typename...Args>
void h(Args const&...args)
{
f(args...);
}
int main()
{
int a = 1;
int const b = 2;
{
g(a, a); std::cout << std::endl;
// lvalue, lvalue // OK
}
{
g(a, b);
std::cout << std::endl;
// lvalue, lvalue // How so?!
}
{
h(a, a);
std::cout << std::endl;
// clvalue, clvalue // OK
}
return 0;
}