instantiate-member-expr.cpp [plain text]
template<typename T>
struct S {
S() { }
};
template<typename T>
struct vector {
void push_back(const T&) { int a[sizeof(T) ? -1: -1]; } };
class ExprEngine {
public:
typedef vector<S<void *> >CheckersOrdered;
CheckersOrdered Checkers;
template <typename CHECKER>
void registerCheck(CHECKER *check) {
Checkers.push_back(S<void *>()); }
};
class RetainReleaseChecker { };
void f(ExprEngine& Eng) {
Eng.registerCheck(new RetainReleaseChecker); }
namespace test1 {
template<typename T> struct A {
int a;
};
template<typename T> struct B : A<float>, A<T> {
void f() {
a = 0; }
};
template struct B<int>;
struct O {
int a;
template<typename T> struct B : A<T> {
void f() {
a = 0; }
};
};
template struct O::B<int>; }
namespace test2 {
template <class T> struct A {
void foo() {
T::bar(); }
};
template <class T> class B {
void foo(A<T> a) {
a.test2::template A<T>::foo(); }
};
template class B<int>;
}