title: Force narrowing conversion warning
body: <p>Consider the following code that illustrates some narrowing conversions:</p>
  
  <pre><code>template &lt;class T&gt;
  class wrapper 
  {   
      template &lt;class&gt; friend class wrapper;
      public:
          constexpr wrapper(T value)
          : _data(value)
          {}
          template &lt;class U&gt;
          constexpr wrapper(wrapper&lt;U&gt; other)
          : _data(other._data) 
          {}
          wrapper&amp; operator=(T value)
          {_data = value; return *this;}
          template &lt;class U&gt;
          wrapper&amp; operator=(wrapper&lt;U&gt; other)
          {_data = other._data; return *this;}
      private:
          T _data;
  };
  
  int main(int argc, char* argv[]) 
  {
      wrapper&lt;unsigned char&gt; wrapper1 = 5U;
      wrapper&lt;unsigned char&gt; wrapper2{5U};
      wrapper&lt;unsigned char&gt; wrapper3(5U);
      wrapper&lt;unsigned int&gt; wrapper4 = 5U;
      wrapper&lt;unsigned int&gt; wrapper5{5U};
      wrapper&lt;unsigned int&gt; wrapper6(5U);
      wrapper&lt;unsigned char&gt; wrapper7 = wrapper4;  // Narrowing
      wrapper&lt;unsigned char&gt; wrapper8{wrapper5};  // Narrowing
      wrapper&lt;unsigned char&gt; wrapper9(wrapper6);  // Narrowing
      wrapper7 = wrapper4;  // Narrowing
      wrapper8 = wrapper5;  // Narrowing
      wrapper9 = wrapper6;  // Narrowing
      return 0;
  }
  </code></pre>
  
  <p>How to change the body of the <code>wrapper</code> members, so that it triggers the compiler warning for narrowing conversion? My goal is to make the user aware that something is potentially wrong with their code.</p>