std forward and enums

时间:2013-11-10 13:17:13

标签: c++ visual-studio-2012 c++11 enums

我有一个自定义内存分配器,我在其中使用std :: forward来转发构造函数参数。在构造类在其构造函数中具有枚举的情况下,我遇到了问题。

以下是显示错误的示例代码:

class Monkey
{
public:

    enum TestEnum
    {
        TEST1 = 0,
        TEST2
    };

    Monkey(int age, TestEnum e) : mAge(age), mE(e)
    {
    }


private:
    TestEnum mE;
    int mAge;
};

template <class T, typename... Arguments>
T* AllocateObject(Arguments&&... args) { return new (malloc(sizeof(T))) T(std::forward<Arguments>(args)...); }


int _tmain(int argc, _TCHAR* argv[])
{
    Monkey* m = AllocateObject<Monkey>(100, Monkey::TEST1);

    return 0;
}

编译器向我抛出这些错误;

error C2065: 'TestEnum' : undeclared identifier
error C2974: 'std::forward' : invalid template argument for '_Ty', type expected
fatal error C1903: unable to recover from previous error(s); stopping compilation

造成这种情况的原因是什么?不应该std::forward处理这个问题吗?

0 个答案:

没有答案