函数入参无法用抽象类定义,实际上直接用抽象类强制类型转换也可以
template<typename Type, typename = void>
struct is_abstract
{
public:
static constexpr bool value = true;
};
template<typename Type>
struct is_abstract<Type, decltype (static_cast<void (*) (Type) > (nullptr), void()) >
{
public:
static constexpr bool value = false;
};