// { dg-do run }
|
// { dg-do run }
|
// GROUPS passed nested-classes
|
// GROUPS passed nested-classes
|
#include
|
#include
|
#include
|
#include
|
#include
|
#include
|
|
|
static char output[1024];
|
static char output[1024];
|
|
|
class BDDRetrace {
|
class BDDRetrace {
|
public:
|
public:
|
class Dump {
|
class Dump {
|
public:
|
public:
|
virtual Dump& operator<<(char c) = 0;
|
virtual Dump& operator<<(char c) = 0;
|
virtual Dump& operator<<(int i) = 0;
|
virtual Dump& operator<<(int i) = 0;
|
virtual Dump& operator<<(double r) = 0;
|
virtual Dump& operator<<(double r) = 0;
|
};
|
};
|
|
|
class Dump1: public Dump {
|
class Dump1: public Dump {
|
public:
|
public:
|
Dump& operator<<(char c);
|
Dump& operator<<(char c);
|
Dump& operator<<(int i);
|
Dump& operator<<(int i);
|
Dump& operator<<(double r);
|
Dump& operator<<(double r);
|
};
|
};
|
};
|
};
|
|
|
class Dump2: public BDDRetrace::Dump {
|
class Dump2: public BDDRetrace::Dump {
|
public:
|
public:
|
BDDRetrace::Dump& operator<<(char c);
|
BDDRetrace::Dump& operator<<(char c);
|
BDDRetrace::Dump& operator<<(int i);
|
BDDRetrace::Dump& operator<<(int i);
|
BDDRetrace::Dump& operator<<(double r);
|
BDDRetrace::Dump& operator<<(double r);
|
};
|
};
|
|
|
BDDRetrace::Dump&
|
BDDRetrace::Dump&
|
BDDRetrace::Dump1::operator<<(char c)
|
BDDRetrace::Dump1::operator<<(char c)
|
{ char tempout[1024];
|
{ char tempout[1024];
|
std::sprintf(tempout, "%s%s%c", output, "1-", c);
|
std::sprintf(tempout, "%s%s%c", output, "1-", c);
|
std::strcpy(output, tempout);
|
std::strcpy(output, tempout);
|
return *this;
|
return *this;
|
}
|
}
|
|
|
BDDRetrace::Dump&
|
BDDRetrace::Dump&
|
BDDRetrace::Dump1::operator<<(int i)
|
BDDRetrace::Dump1::operator<<(int i)
|
{ char tempout[1024];
|
{ char tempout[1024];
|
std::sprintf (tempout, "%s%s%d", output, "1-", i);
|
std::sprintf (tempout, "%s%s%d", output, "1-", i);
|
std::strcpy (output, tempout);
|
std::strcpy (output, tempout);
|
return *this; }
|
return *this; }
|
|
|
BDDRetrace::Dump&
|
BDDRetrace::Dump&
|
BDDRetrace::Dump1::operator<<(double r)
|
BDDRetrace::Dump1::operator<<(double r)
|
{ char tempout[1024];
|
{ char tempout[1024];
|
std::sprintf (tempout, "%s%s%1.0f", output, "1-", r);
|
std::sprintf (tempout, "%s%s%1.0f", output, "1-", r);
|
std::strcpy (output, tempout);
|
std::strcpy (output, tempout);
|
return *this; }
|
return *this; }
|
|
|
BDDRetrace::Dump&
|
BDDRetrace::Dump&
|
Dump2::operator<<(char c)
|
Dump2::operator<<(char c)
|
{ char tempout[1024];
|
{ char tempout[1024];
|
std::sprintf (tempout, "%s%s%c", output, "2-", c);
|
std::sprintf (tempout, "%s%s%c", output, "2-", c);
|
std::strcpy (output, tempout);
|
std::strcpy (output, tempout);
|
return *this; }
|
return *this; }
|
|
|
BDDRetrace::Dump&
|
BDDRetrace::Dump&
|
Dump2::operator<<(int i)
|
Dump2::operator<<(int i)
|
{ char tempout[1024];
|
{ char tempout[1024];
|
std::sprintf (tempout, "%s%s%d", output, "2-", i);
|
std::sprintf (tempout, "%s%s%d", output, "2-", i);
|
std::strcpy (output, tempout);
|
std::strcpy (output, tempout);
|
return *this; }
|
return *this; }
|
|
|
BDDRetrace::Dump&
|
BDDRetrace::Dump&
|
Dump2::operator<<(double r)
|
Dump2::operator<<(double r)
|
{ char tempout[1024];
|
{ char tempout[1024];
|
std::sprintf (tempout, "%s%s%1.0f", output, "2-", r);
|
std::sprintf (tempout, "%s%s%1.0f", output, "2-", r);
|
std::strcpy (output, tempout);
|
std::strcpy (output, tempout);
|
return *this; }
|
return *this; }
|
|
|
int main()
|
int main()
|
{
|
{
|
BDDRetrace::Dump1 d1;
|
BDDRetrace::Dump1 d1;
|
Dump2 d2;
|
Dump2 d2;
|
|
|
std::sprintf (output, " ");
|
std::sprintf (output, " ");
|
|
|
d1 << 'a';
|
d1 << 'a';
|
d1 << 1;
|
d1 << 1;
|
d1 << 1.0;
|
d1 << 1.0;
|
|
|
d2 << 'a';
|
d2 << 'a';
|
d2 << 1;
|
d2 << 1;
|
d2 << 1.0;
|
d2 << 1.0;
|
|
|
if (std::strcmp (output, " 1-a1-11-12-a2-12-1") == 0)
|
if (std::strcmp (output, " 1-a1-11-12-a2-12-1") == 0)
|
std::printf ("PASS\n");
|
std::printf ("PASS\n");
|
else
|
else
|
{ std::printf ("FAIL\n"); return 1; }
|
{ std::printf ("FAIL\n"); return 1; }
|
|
|
return 0;
|
return 0;
|
}
|
}
|
|
|