// { dg-do compile }
bool foo();
struct C
{
    C()
    {
        if (foo())
            foo();
    }
};
struct S
{
    struct dummy
    {
        int i_;
    };
    typedef int dummy::*bool_type;
    operator bool_type() const
    {
        return foo() ? &dummy::i_ : 0;
    }
};
int x;
struct adaptor
{
    C c;
    virtual void bar()
    {
        if (S())
            x = 0;
    }
};
int main()
{
    adaptor a;
}