title: std::type_traits functions changed behavior in vs19 bug or error?
body: <p>The following code worked fine before upgrading to vs19:</p>
  
  <pre><code>template &lt;typename... Args&gt; constexpr  Function Callback(std::function&lt;void(Args...)&gt; const f) {
      return [=]() {
        GlobalVar=sum((std::is_base_of&lt;BaseC,std::remove_pointer&lt;std::remove_reference&lt;Args&gt;::type&gt;::type&gt;::value)...); 
         f((static_cast&lt;Args&gt;(GetVar))...); };
  };}
  </code></pre>
  
  <p>The code is for a template function with function argument which returns a lambda to execute the argument with the values of GetVar (which is a class instance with overloaded operators), but just after setting a global var to the number of arguments the function will get which will have a base class BaseC or a pointer or a reference of it.</p>
  
  <p>Now its throwing these errors:</p>
  
  <pre><code>Error   C2275    'std::remove_reference&lt;int&gt;::type': illegal use of this type as an expression  
  Error   C2275    'std::remove_pointer&lt;_Ty&gt;::type': illegal use of this type as an expression    
  Error   C2275    'std::remove_reference&lt;char *&gt;::type': illegal use of this type as an expression   
  Error   C2955    'std::remove_pointer': use of class template requires template argument list   
  Error   C2955    'std::is_base_of': use of class template requires template argument list
  Error   C2923    'std::remove_pointer': 'std::remove_reference&lt;int&gt;::type' is not a valid template type argument for parameter '_Ty'    
  Error   C2923    'std::is_base_of': 'std::remove_pointer&lt;_Ty&gt;::type' is not a valid template type argument for parameter '_Derived' 
  </code></pre>