Добрый день!
Такая проблема — в следующем коде внутри шаблона непрапвильно выбирается определение класса CreatePolicy и выдаётся ошибка
C:\work\projects\test\test.cpp(18) : error C2027: use of undefined type 'CreatePolicy'
C:\work\projects\test\test.cpp(15) : see declaration of 'CreatePolicy'
то есть декларацией компилятор считает почему то friend class CreatePolicy, а не параметр щаблона.
На других компиляторах проверить не могу — нет под рукой.
это по стандарту?
template <typename T>
class TNewCreatePolicy {
public:
static T * Create() {
return new T();
};
};
template <typename T, typename CreatePolicy = TNewCreatePolicy<T> >
class TObject {
friend class CreatePolicy;
public:
static T * Create() {
return CreatePolicy::Create();
}
};
class TInt : public TObject<TInt> {
private:
TInt() {};
};