title: Can't define string literal in template arguments
body: <p>I'm trying to define a new string literal within the template arguments of a function. </p>
  
  <pre><code>template&lt;const char* msg&gt;
  const char* function()
  {
      return msg;
  }
  int main()
  {
      function&lt;"why doesnt this work?"&gt;()
      return 0;
  }
  </code></pre>
  
  <p>However, it doesn't work. I have to do something like this</p>
  
  <pre><code>constexpr char msg[] = "this is ugly and annoying";
  int main()
  {
      function&lt;msg&gt;()
      return 0;
  }
  </code></pre>
  
  <p>This is extremely inconvenient. I'm trying to create a printf-like function but this is a major hurdle. If I go to a fake string (e.g. <code>tuple('a','b','c'...</code>) then it makes the interface for extending user-defined formats harder and more ugly as well as the code in general. (%d%,%f%,%e% are default formats, %myformat% is an user-defined example. They can be as long as they want because of the % terminator)</p>
  
  <p>How can I have my cake and eat it too (or at least as close to it as possible)?</p>