#include <iostream>
#include <type_traits>

using namespace std;

// Variant 1:

class I1 {
public:
    virtual ~I1() {}
};

// Variant 2.1:

class I21 {
public:
    virtual ~I21() = 0;
};

I21::~I21() {}

// Variant 2.2:

class I22 {
public:
    virtual ~I22() = 0;
};

I22::~I22() = default;

int main() {
	cout << boolalpha << "std::is_abstract:\n"; 
	
	cout << "I1:  " << std::is_abstract<I1>::value << '\n';
	cout << "I21: " << std::is_abstract<I21>::value << '\n';
	cout << "I22: " << std::is_abstract<I22>::value << '\n';

	return 0;
}