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
対処しなくていいの?