// { dg-do compile }
|
// { dg-do compile }
|
// Contributed by Gabriel Dos Reis
|
// Contributed by Gabriel Dos Reis
|
// PR c++/2204: Check for parameters of abstract type in function declarations.
|
// PR c++/2204: Check for parameters of abstract type in function declarations.
|
|
|
namespace N1 {
|
namespace N1 {
|
struct X;
|
struct X;
|
|
|
struct Y1 {
|
struct Y1 {
|
void g(X parm1); // { dg-error "abstract" }
|
void g(X parm1); // { dg-error "abstract" }
|
void g(X parm2[2]); // { dg-error "abstract" }
|
void g(X parm2[2]); // { dg-error "abstract" }
|
void g(X (*parm3)[2]); // { dg-error "abstract" }
|
void g(X (*parm3)[2]); // { dg-error "abstract" }
|
};
|
};
|
|
|
|
|
template
|
template
|
struct Y2 {
|
struct Y2 {
|
void g(X parm4); // { dg-error "abstract" }
|
void g(X parm4); // { dg-error "abstract" }
|
void g(X parm5[2]); // { dg-error "abstract" }
|
void g(X parm5[2]); // { dg-error "abstract" }
|
void g(X (*parm6)[2]); // { dg-error "abstract" }
|
void g(X (*parm6)[2]); // { dg-error "abstract" }
|
};
|
};
|
|
|
struct X { // { dg-error "note" }
|
struct X { // { dg-error "note" }
|
virtual void xfunc(void) = 0; // { dg-error "note" }
|
virtual void xfunc(void) = 0; // { dg-error "note" }
|
};
|
};
|
}
|
}
|
|
|
namespace N2 {
|
namespace N2 {
|
struct X1 { // { dg-error "note" }
|
struct X1 { // { dg-error "note" }
|
virtual void xfunc(void) = 0; // { dg-error "note" }
|
virtual void xfunc(void) = 0; // { dg-error "note" }
|
void g(X1 parm7); // { dg-error "abstract" }
|
void g(X1 parm7); // { dg-error "abstract" }
|
void g(X1 parm8[2]); // { dg-error "abstract" }
|
void g(X1 parm8[2]); // { dg-error "abstract" }
|
void g(X1 (*parm9)[2]); // { dg-error "abstract" }
|
void g(X1 (*parm9)[2]); // { dg-error "abstract" }
|
};
|
};
|
|
|
template
|
template
|
struct X2 { // { dg-error "note" }
|
struct X2 { // { dg-error "note" }
|
virtual void xfunc(void) = 0; // { dg-error "note" }
|
virtual void xfunc(void) = 0; // { dg-error "note" }
|
void g(X2 parm10); // { dg-error "abstract" }
|
void g(X2 parm10); // { dg-error "abstract" }
|
void g(X2 parm11[2]); // { dg-error "abstract" }
|
void g(X2 parm11[2]); // { dg-error "abstract" }
|
void g(X2 (*parm12)[2]); // { dg-error "abstract" }
|
void g(X2 (*parm12)[2]); // { dg-error "abstract" }
|
};
|
};
|
}
|
}
|
|
|
namespace N3 {
|
namespace N3 {
|
struct X { // { dg-error "note" "" }
|
struct X { // { dg-error "note" "" }
|
virtual void xfunc(void) = 0; // { dg-error "note" }
|
virtual void xfunc(void) = 0; // { dg-error "note" }
|
};
|
};
|
void g(X parm13); // { dg-error "abstract" }
|
void g(X parm13); // { dg-error "abstract" }
|
void g(X parm14[2]); // { dg-error "abstract" }
|
void g(X parm14[2]); // { dg-error "abstract" }
|
void g(X (*parm15)[2]); // { dg-error "abstract" }
|
void g(X (*parm15)[2]); // { dg-error "abstract" }
|
|
|
template
|
template
|
void g(X parm16); // { dg-error "abstract" }
|
void g(X parm16); // { dg-error "abstract" }
|
template
|
template
|
void g(X parm17[2]); // { dg-error "abstract" }
|
void g(X parm17[2]); // { dg-error "abstract" }
|
template
|
template
|
void g(X (*parm18)[2]); // { dg-error "abstract" }
|
void g(X (*parm18)[2]); // { dg-error "abstract" }
|
}
|
}
|
|
|