text: Q:
  
  C++ function signature that accepts lvalue, rvalue and rvalue ref
  
  Assuming I have a function like the following:
  print_sutff(const std::string stuff) {
      std::cout << stuff;
  }
  
  I can accept:
  std::string
  std::string&
  std::string&&
  
  Without any influence on how the function code looks like. 
  However the function could be called in multiple ways, with which I'd like to achieve the following behavior (or as close to it as possible):
  auto pass = "a string";
  print_sutff(pass);
  
  Here the user can't use the &&, I would prefer to & to take priority to lvaue
  or:
  print_sutff("a string"); 
  
  Here the && constructor should be invoked.
  So my question is:
  Is there any way to make a function accept lvalue, & and && ? And if so, is there any way to prioritize which one is used based on the context where it is called ?
  If not, is there any way to make a function accept both & and && ? Which would mean the behavior of which signature is used which is well defined.
  
  A:
  
  Just do this:
  void print_stuff(std::string const& stuff) {
      std::cout << stuff;
  }
  
  A const lvalue reference can accept either lvalues or rvalues. If you're not modifying the input, that's a good default. 
  
  Even better, since we're C++17, prefer:
  void print_stuff(std::string_view );
  
  