Функции std :: type_traits изменили поведение в ошибке или ошибке vs19? - PullRequest
0 голосов
/ 29 мая 2019

Следующий код работал нормально перед обновлением до vs19:

template <typename... Args> constexpr  Function Callback(std::function<void(Args...)> const f) {
    return [=]() {
      GlobalVar=sum((std::is_base_of<BaseC,std::remove_pointer<std::remove_reference<Args>::type>::type>::value)...); 
       f((static_cast<Args>(GetVar))...); };
};}

Код предназначен для функции шаблона с аргументом функции, которая возвращает лямбда для выполнения аргумента со значениями GetVar (который является классомэкземпляр с перегруженными операторами), но сразу после установки глобального var для количества аргументов, которые получит функция, которая будет иметь базовый класс BaseC или указатель или ссылку на него.

Теперь она выдает следующие ошибки:

Error   C2275    'std::remove_reference<int>::type': illegal use of this type as an expression  
Error   C2275    'std::remove_pointer<_Ty>::type': illegal use of this type as an expression    
Error   C2275    'std::remove_reference<char *>::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<int>::type' is not a valid template type argument for parameter '_Ty'    
Error   C2923    'std::is_base_of': 'std::remove_pointer<_Ty>::type' is not a valid template type argument for parameter '_Derived' 
...