title: make_unique with brace initialization
body: <p><a href="https://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique" rel="noreferrer">https://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique</a> writes that <code>std::make_unique</code> can be implemented as</p>
  
  <pre><code>template&lt;typename T, typename... Args&gt;
  std::unique_ptr&lt;T&gt; make_unique(Args&amp;&amp;... args)
  {
      return std::unique_ptr&lt;T&gt;(new T(std::forward&lt;Args&gt;(args)...));
  }
  </code></pre>
  
  <p>This does not work for plain structs with no constructors. Those can be brace-initialized but don't have a non-default constructor. Example:</p>
  
  <pre><code>#include &lt;memory&gt;
  struct point { int x, z; };
  int main() { std::make_unique&lt;point&gt;(1, 2); }
  </code></pre>
  
  <p><a href="https://ideone.com/FB3fQ7" rel="noreferrer">Compiling this</a> will have the compiler complain about lack of a 2-argument constructor, and rightly so.</p>
  
  <p>I wonder, is there any technical reason not to define the function in terms of brace initialization instead? As in</p>
  
  <pre><code>template&lt;typename T, typename... Args&gt;
  std::unique_ptr&lt;T&gt; make_unique(Args&amp;&amp;... args)
  {
      return std::unique_ptr&lt;T&gt;(new T{std::forward&lt;Args&gt;(args)...});
  }
  </code></pre>
  
  <p>That <a href="https://ideone.com/BDsq1S" rel="noreferrer">works well enough</a> for the scenario above. Are there any other legitimate use cases this would break?</p>
  
  <p>Seeing how the general trend appears to prefer braces for initialization, I would assume making braces in that template would be the canonical choice, but the fact that the standard doesn't do it might be an indication of me missing something.</p>