#include <iostream>
#include <type_traits>
class A
{
public:
virtual void met() = 0;
};
class B : public A
{
public:
virtual void met() const;
};
class C : public A
{
public:
virtual void met();
};
class D : public A
{
public:
void met(){};
};
int main() {
std::cout << std::is_abstract<A>::value << std::endl;
std::cout << std::is_abstract<B>::value << std::endl;
std::cout << std::is_abstract<C>::value << std::endl;
std::cout << std::is_abstract<D>::value << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CgoKY2xhc3MgQQp7CnB1YmxpYzoKdmlydHVhbCB2b2lkIG1ldCgpID0gMDsgCn07CmNsYXNzIEIgOiBwdWJsaWMgQQp7CnB1YmxpYzoKdmlydHVhbCB2b2lkIG1ldCgpIGNvbnN0OyAKfTsgCmNsYXNzIEMgOiBwdWJsaWMgQQp7CnB1YmxpYzoKdmlydHVhbCB2b2lkIG1ldCgpOyAKfTsKY2xhc3MgRCA6IHB1YmxpYyBBCnsKcHVibGljOgp2b2lkIG1ldCgpe307IAp9OwoKCmludCBtYWluKCkgewogICBzdGQ6OmNvdXQgPDwgc3RkOjppc19hYnN0cmFjdDxBPjo6dmFsdWUgPDwgc3RkOjplbmRsOwogICBzdGQ6OmNvdXQgPDwgc3RkOjppc19hYnN0cmFjdDxCPjo6dmFsdWUgPDwgc3RkOjplbmRsOwogICBzdGQ6OmNvdXQgPDwgc3RkOjppc19hYnN0cmFjdDxDPjo6dmFsdWUgPDwgc3RkOjplbmRsOwogICBzdGQ6OmNvdXQgPDwgc3RkOjppc19hYnN0cmFjdDxEPjo6dmFsdWUgPDwgc3RkOjplbmRsOwp9