#include <iostream>

using namespace std;

class OverVoid{
public:

    virtual ~OverVoid(){
    };
};

class Meta : public OverVoid{

};

template <typename T>
struct is_overvoid_or_meta
{
     static const bool value = false;
};

template <> struct is_overvoid_or_meta<OverVoid>
{
     static const bool value = true;
};

template <> struct is_overvoid_or_meta<Meta>
{
     static const bool value = true;
};

template<typename _Ty>
class Move
{
     typedef typename std::enable_if<is_overvoid_or_meta<_Ty>::value, _Ty>::type Type;
};

int main()
{
	Move<OverVoid> m1;
	Move<Meta> m2;
	Move<int> m3;
	return 0;
}