// { dg-do assemble }
|
// { dg-do assemble }
|
// GROUPS passed templates
|
// GROUPS passed templates
|
|
|
template
|
template
|
class Vector
|
class Vector
|
{
|
{
|
int sz;
|
int sz;
|
T *v;
|
T *v;
|
public:
|
public:
|
Vector (int s) : sz (s) { v = new T[sz]; }
|
Vector (int s) : sz (s) { v = new T[sz]; }
|
~Vector () { delete[] v; }
|
~Vector () { delete[] v; }
|
T &operator[] (int i) { return v[i]; }
|
T &operator[] (int i) { return v[i]; }
|
int size () { return sz; }
|
int size () { return sz; }
|
};
|
};
|
|
|
template// { dg-error "" } previous definition of T
|
template// { dg-error "" } previous definition of T
|
struct Comparator
|
struct Comparator
|
{
|
{
|
typedef T T;// { dg-error "" } use of template type T in typedef to T
|
typedef T T;// { dg-error "" } use of template type T in typedef to T
|
static int lessthan (T &a, T &b) { return a < b; }
|
static int lessthan (T &a, T &b) { return a < b; }
|
};
|
};
|
|
|
template
|
template
|
struct Sort
|
struct Sort
|
{
|
{
|
static void sort (Vector &);// { dg-error "" } use of bad T
|
static void sort (Vector &);// { dg-error "" } use of bad T
|
};
|
};
|
|
|
template
|
template
|
void Sort::sort (Vector &v)// { dg-error "" } use of bad T
|
void Sort::sort (Vector &v)// { dg-error "" } use of bad T
|
{
|
{
|
int n = v.size ();
|
int n = v.size ();
|
|
|
for (int i = 0; i < n - 1; i++)
|
for (int i = 0; i < n - 1; i++)
|
for (int j = n - 1; i < j; j--)
|
for (int j = n - 1; i < j; j--)
|
if (Comp::lessthan (v[j], v[j - 1]))
|
if (Comp::lessthan (v[j], v[j - 1]))
|
{
|
{
|
typename Comp::T temp = v[j];
|
typename Comp::T temp = v[j];
|
v[j] = v[j - 1];
|
v[j] = v[j - 1];
|
v[j - 1] = temp;
|
v[j - 1] = temp;
|
}
|
}
|
}
|
}
|
|
|
void
|
void
|
f (Vector &vi)
|
f (Vector &vi)
|
{
|
{
|
Sort >::sort (vi); // { dg-error "'sort' is not a member of 'Sort >'" }
|
Sort >::sort (vi); // { dg-error "'sort' is not a member of 'Sort >'" }
|
}
|
}
|
|
|