Следующий код работал нормально перед обновлением до 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'