Давайте получим следующий код:
template <typename T> struct X
{ X() { }
};
struct __declspec(dllexport) A
{ struct __declspec(dllexport) AB
{ int i;
};
typedef X <AB> XAB;
//template struct __declspec(dllexport) X <AB>; // error C2252: an explicit instantiation of a template can only occur at namespace scope
static XAB x; // warning C4251: 'A::x' : struct 'X<T>' needs to have dll-interface to be used by clients of struct 'A'
static X <AB> x2; // warning C4251: 'A::x2' : struct 'X<T>' needs to have dll-interface to be used by clients of struct 'A'
X <AB> x3; // warning C4251: 'A::x3' : struct 'X<T>' needs to have dll-interface to be used by clients of struct 'A'
};
template struct __declspec(dllexport) X <A::AB>; // Has no effect
Итак:
Так как правильно решить эту проблему, чтобы избежать предупреждений и ошибок?
Кстати: создание шаблона в классе хорошо работало в VS2008.
Спасибозаранее.
LuP