title: Is this implementation of std::decay a correct one
body: <p>Is this implementation of std::decay a correct one?</p>
  
  <pre><code>template&lt;class T&gt;
  T DecayType(T);
  
  template&lt;class T&gt;
  struct decay {
      using type = decltype(DecayType(declval&lt;T&gt;()));
  };
  </code></pre>
  
  <p>I ask because everything I came across uses some template branching to carefully manipulate the type while this seems to be acting just by definition.</p>