#include <iostream>
#include <type_traits>

auto main() -> int {
  using A = std::add_rvalue_reference<int>::type;
  using B = std::add_rvalue_reference<int&>::type;
  using C = std::add_rvalue_reference<int&&>::type;
  using D = std::add_rvalue_reference<int*>::type;

  std::cout << std::boolalpha;
  std::cout << "typedefs of int&&:" << "\n";
  std::cout << "A: " << std::is_same<int&&, A>::value << "\n";
  std::cout << "B: " << std::is_same<int&&, B>::value << "\n";
  std::cout << "C: " << std::is_same<int&&, C>::value << "\n";
  std::cout << "D: " << std::is_same<int&&, D>::value << "\n";
}