blob: 3557ab2aa54a5a645316d2ee8c060db7ff3ac525 [file] [log] [blame]
// PR 41377
// { dg-do compile }
// { dg-options "-O3" }
struct A
{
bool foo(int*) const;
} a;
struct B {};
struct B1 : B
{
bool (A::*pmf)(int*) const;
const A* pa;
B1() : pmf(&A::foo), pa(&a) {}
bool operator()() const { return (pa->*pmf)(new int); }
};
struct B2 : B
{
B1 b1;
B2(const B1& _b1) : b1(_b1) {}
bool operator()() const { return b1(); }
};
template<int> struct C
{
void bar(B2 b2) { while (b2()) ; }
C() { bar(B2(B1())); }
};
void baz(int i)
{
switch(i)
{
case 0: new C<0>;
case 1: new C<1>;
case 2: new C<2>;
}
}