59 lines
1.5 KiB
C
59 lines
1.5 KiB
C
// { dg-do assemble }
|
|
// 980924 bkoz
|
|
// just a quick test for export, to make sure we are warning for it.
|
|
// CHANGE ME when it's supported
|
|
|
|
|
|
// 14 Templates
|
|
//p 6
|
|
// A namespace-scope declaration or definintion of a non-line function
|
|
// template, a non-inline member function template, a non-inline
|
|
// member function of a class template or a static data member of a
|
|
// class template may be preceeded by the export keyword. If such a
|
|
// template is defined in the same translation unit in which it is
|
|
// declared as exported, the definition is considered to be
|
|
// exported. The first declaration of the template containing the
|
|
// export keyword must not follow the definition. (meaning that export
|
|
// can't beredeclared as non-export??)
|
|
|
|
// 1
|
|
// template definition
|
|
export template <class T> // { dg-warning "" }
|
|
bool templ_one(T a) {
|
|
if (a > 0)
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
|
|
|
|
// 2
|
|
// static data, mf, mf template
|
|
template <class T>
|
|
class X_one {
|
|
unsigned short id;
|
|
T type;
|
|
public:
|
|
static const bool is_specialized ;
|
|
|
|
X_one(const unsigned short& us = 5): id(us), type(T(0)) {}
|
|
unsigned short ret_id ();
|
|
template <class T2> bool compare_ge(T2 test);
|
|
};
|
|
|
|
export template <class T> // { dg-warning "" }
|
|
const bool X_one<T>::is_specialized = false;
|
|
|
|
export template <class T> // { dg-warning "" }
|
|
unsigned short X_one<T>::ret_id() {
|
|
return id;
|
|
}
|
|
|
|
export template <class T2> // { dg-warning "" }
|
|
bool compare_ge(T2 test) {
|
|
if (test > type) // { dg-error "" } .*
|
|
return true;
|
|
return false;
|
|
}
|
|
|