title: C++, concepts not working with unsigned integers as a result type?
body: <p>I am playing around with <code>concepts</code> and I tried to define a <code>concept</code> which takes any <code>non-type parameter</code> and the function <code>isUnsignedInt</code> checks if the parameter is an<code>unsigned int</code>, using the <code>required</code> keyword followed by the <code>concept</code>.</p>
  
  <p>The problem is, that I can pass a negative integer and there is no error message, that the type is not <code>unsigned int</code>.</p>
  
  <p>Is my understanding of concepts wrong?</p>
  
  <p>Currently I am working with the <code>gcc 9.2 compiler</code> and my CMake contains <code>add_compile_options(-fconcepts)</code>, which enables <code>concepts</code>.</p>
  
  <p>Code:</p>
  
  <pre><code>template&lt;auto a&gt;
  concept special = requires(){
      {a} -&gt; unsigned int;
  };
  
  template&lt;auto a&gt; requires special&lt;a&gt;
  constexpr auto isUnsignedInt(){
      return a;
  }
  
  int main(){
      std::cout &lt;&lt; isUnsignedInt&lt;-2&gt;() &lt;&lt; std::endl;
      return 0;
  }
  </code></pre>
  
  <p>Output:</p>
  
  <pre><code>-2
  </code></pre>