diff options
Diffstat (limited to 'test/SemaTemplate/virtual-member-functions.cpp')
-rw-r--r-- | test/SemaTemplate/virtual-member-functions.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/test/SemaTemplate/virtual-member-functions.cpp b/test/SemaTemplate/virtual-member-functions.cpp index 69ae0807b4..a9eb729ed5 100644 --- a/test/SemaTemplate/virtual-member-functions.cpp +++ b/test/SemaTemplate/virtual-member-functions.cpp @@ -3,14 +3,19 @@ namespace PR5557 { template <class T> struct A { A(); + virtual void anchor(); // expected-note{{instantiation}} virtual int a(T x); }; template<class T> A<T>::A() {} +template<class T> void A<T>::anchor() { } + template<class T> int A<T>::a(T x) { return *x; // expected-error{{requires pointer operand}} } -A<int> x; // expected-note{{instantiation}} +void f(A<int> x) { + x.anchor(); +} template<typename T> struct X { @@ -20,3 +25,19 @@ struct X { template<> void X<int>::f() { } } + +template<typename T> +struct Base { + virtual ~Base() { + int *ptr = 0; + T t = ptr; // expected-error{{cannot initialize}} + } +}; + +template<typename T> +struct Derived : Base<T> { + virtual void foo() { } +}; + +template struct Derived<int>; // expected-note{{instantiation}} + |