title: println! error: expected a literal / format argument must be a string literal
body: <p>This extremely simple Rust program:</p>
  
  <pre><code>fn main() {
      let c = "hello";
      println!(c);
  }
  </code></pre>
  
  <p>throws the following compile-time error:</p>
  
  <pre class="lang-none prettyprint-override"><code>error: expected a literal
   --&gt; src/main.rs:3:14
    |
  3 |     println!(c);
    |              ^
  </code></pre>
  
  <p>In previous versions of Rust, the error said:</p>
  
  <pre class="lang-none prettyprint-override"><code>error: format argument must be a string literal.
       println!(c);
                ^
  </code></pre>
  
  <p>Replacing the program with:</p>
  
  <pre><code>fn main() {
      println!("Hello");    
  }
  </code></pre>
  
  <p>Works fine.</p>
  
  <p>The meaning of this error isn't clear to me and a Google search hasn't really shed light on it. Why does passing <code>c</code> to the <code>println!</code> macro cause a compile time error? This seems like quite unusual behaviour.</p>