#include <iostream>

#define CLASS(name)              \
    virtual std::string className() {    \
        return #name;            \     
    }                           

class A {
public:
   CLASS(A) 

   A(){}
   ~A(){}  

   void output() {
       std::cout << className() << std::endl;
   }
};

class B: public A{
public:
   CLASS(B)
   B(){}
   ~B(){}
};

int main() {
   B b;
   b.output();    // This obviously outputs "A" but I would
                  // like it to output "B" from the base class
                  // function
   return 0;
}
