У меня есть следующий класс, используемый с MSVC2013 Update 4:Почему этот шаблон не компилируется?
template <typename T>
class MyFunction;
template<typename R, class... Ts>
class MyFunction < R(Ts...) >
{
public:
using func_type = R(*)(Ts...);
MyFunction(func_type f)
: m_func(f)
{
}
R operator()(Ts ... args)
{
return m_func(args...);
}
private:
func_type m_func;
};
Если я использую его следующим образом:
MyFunction<int (int)> f1(nullptr);
MyFunction<int __cdecl(int)> f2(nullptr);
MyFunction<int __stdcall(int)> f3(nullptr);
Почему f3 не компилировать? (Учитывая, что __cdecl работает!).
error C2079: 'f3' uses undefined class 'MyFunction<int (int)>'
error C2440: 'initializing' : cannot convert from 'nullptr' to 'int'
'nullptr = NULL'. Думаю об этом. –
Конструктор принимает func_type, который является указателем на функцию, поэтому nullptr в порядке? – paulm
Я подозреваю, что 'R (Ts ...)' неявно 'R __cdecl (Ts ...)', так что частичная специализация не соответствует 'int __stdcall (int)'. –