You are taking quiz cppquiz.org/q/0ftpu. After 0 of 10 questions, you have 0.00 points.

Question #116 Difficulty: 2

According to the C++23 standard, what is the output of this program?

    #include <iostream>
#include <utility>

int y(int &) { return 1; }
int y(int &&) { return 2; }

template <class T> int f(T &&x) { return y(x); }
template <class T> int g(T &&x) { return y(std::move(x)); }
template <class T> int h(T &&x) { return y(std::forward<T>(x)); }

int main() {
  int i = 10;
  std::cout << f(i) << f(20);
  std::cout << g(i) << g(20);
  std::cout << h(i) << h(20);
  return 0;
}

Hint:

The T&& in the templated function doesn't necessarily result in an rvalue reference, it depends on the type that is used to instantiate the template. If instantiated with an lvalue, it collapses to an lvalue reference, if instantiated with an rvalue, it collapses to an rvalue reference.

Answer:

Mode : Quiz

If you want to quit the current quiz and go back to training mode, click here.