title: Does adding a reference to std::queue create a copy?
body: <p>I have a bunch of unrelated structs which I'd like to add to a std::queue. I'm using a struct named <code>message</code> which I use to encapsulate the unrelated structs in order to store them in the same queue.</p>
  
  <pre><code>struct message {
      char *struct_pointer;
      size_t struct_size;
  };
  
  struct confirmer {
      int32_t hello;
      int32_t yellow;
      double jello;
  }
  </code></pre>
  
  <p>Inside a message, I then call </p>
  
  <pre><code>confirmer *confirm = new confirmer();
  confirmer-&gt;hello = 100;
  confirmer-&gt;yellow = 000;
  confirmer-&gt;jello = 123.324;
  
  message my_message = {(char *)confirm, sizeof(struct confirmer)};       
  other_namespace::do_things_to_message(my_message);
  </code></pre>
  
  <p>where <code>do_things_to_message</code> takes in a reference to a <code>struct message</code>. </p>
  
  <p>My question is that inside the function <code>do_things_to_message</code>, if I add the parameter <code>curr_message</code> (which is a reference) to a <code>std::container</code>, will it create a copy of the reference and store that in the container? I.e.</p>
  
  <pre><code>void do_things_to_message(struct message&amp; curr_message) {
      my_queue.push(curr_message) //where my_queue is a std::queue my_queue&lt;message&gt;
      //do other things...
      }
  </code></pre>
  
  <p>So what is my_queue actually storing? A copy of the object? The original object? Something else?</p>