#include #include struct A { int m; }; struct B { virtual void foo(); }; struct C { virtual void foo() = 0; }; struct D : C {}; int main() { std::cout << std::boolalpha; std::cout << std::is_abstract::value << '\n'; std::cout << std::is_abstract::value << '\n'; std::cout << std::is_abstract::value << '\n'; std::cout << std::is_abstract::value << '\n'; }