Поделиться через


Ошибка компилятора C2783

Объявление: не удалось вывести аргумент шаблона для идентификатора

Компилятор не может определить аргумент шаблона. Аргументы по умолчанию нельзя использовать для определения аргумента шаблона.

Следующий пример приводит к возникновению ошибки C2783:

// C2783.cpp
template<typename T1, typename T2>
T1 f(T2) {
   return 248;
}

int main() {
   f(1);   // C2783
   // try the following line instead
   int i = f<int>(1);
}

C2783 также может возникать при использовании универсальных шаблонов:

// C2783b.cpp
// compile with: /clr
using namespace System;
generic<typename T1, typename T2>
T1 gf(T2) {
   T1 t1 = safe_cast<T1>( Activator::CreateInstance(T1::typeid));
   return t1;
}

ref class MyClass{};

int main() {
   int i;
   i = gf(9);   // C2783

   // OK
   i = gf<int>(9);
}