#include <iostream>
 
class B {
protected:
    const int a_;
    int b_;
    B (int b, int a) : a_(a), b_(b) {}
public:
    operator bool () const { return b_ == a_; }
};
 
class D1 : public B {
public:
    D1 (int b = 0, int a = 0) : B(b, a) {}
    operator int () const { return b_; }
};
 
class D2 : public B {
public:
    D2 (int b = 0, int a = 0) : B(b, a) {}
    operator const int & () const { return b_; }
};
 
int main () {
    if (const D1 d1a = D1('a', 'a')) std::cout << "d1a\n";
    if (const D1 d1b = D1('b', 'a')) std::cout << "d1b\n";
    if (const D2 d2a = D2('a', 'a')) std::cout << "d2a\n";
    if (const D2 d2b = D2('b', 'a')) std::cout << "d2b\n";
    return 0;
}