PageRenderTime 44ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 1ms

/external/bsd/llvm/dist/clang/test/SemaTemplate/destructor-template.cpp

http://www.minix3.org/
C++ | 84 lines | 65 code | 18 blank | 1 comment | 0 complexity | 0e9b61eb3c60daafe814a8106c7aaf41 MD5 | raw file
Possible License(s): MIT, WTFPL, AGPL-1.0, BSD-3-Clause, GPL-3.0, LGPL-2.0, JSON, 0BSD
  1. // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
  2. template<typename A> class s0 {
  3. template<typename B> class s1 : public s0<A> {
  4. ~s1() {}
  5. s0<A> ms0;
  6. };
  7. };
  8. struct Incomplete;
  9. template<typename T>
  10. void destroy_me(T me) {
  11. me.~T();
  12. }
  13. template void destroy_me(Incomplete*);
  14. namespace PR6152 {
  15. template<typename T> struct X { void f(); };
  16. template<typename T> struct Y { };
  17. template<typename T>
  18. void X<T>::f() {
  19. Y<T> *y;
  20. y->template Y<T>::~Y();
  21. y->template Y<T>::~Y<T>();
  22. y->~Y();
  23. }
  24. template struct X<int>;
  25. }
  26. namespace cvquals {
  27. template<typename T>
  28. void f(int *ptr) {
  29. ptr->~T();
  30. }
  31. template void f<const volatile int>(int *);
  32. }
  33. namespace PR7239 {
  34. template<class E> class A { };
  35. class B {
  36. void f() {
  37. A<int>* x;
  38. x->A<int>::~A<int>();
  39. }
  40. };
  41. }
  42. namespace PR7904 {
  43. struct Foo {
  44. template <int i> ~Foo() {} // expected-error{{destructor cannot be declared as a template}}
  45. };
  46. Foo f;
  47. }
  48. namespace rdar13140795 {
  49. template <class T> class shared_ptr {};
  50. template <typename T> struct Marshal {
  51. static int gc();
  52. };
  53. template <typename T> int Marshal<T>::gc() {
  54. shared_ptr<T> *x;
  55. x->template shared_ptr<T>::~shared_ptr();
  56. return 0;
  57. }
  58. void test() {
  59. Marshal<int>::gc();
  60. }
  61. }
  62. namespace PR16852 {
  63. template<typename T> struct S { int a; T x; };
  64. template<typename T> decltype(S<T>().~S()) f(); // expected-note {{candidate template ignored: couldn't infer template argument 'T'}}
  65. void g() { f(); } // expected-error {{no matching function for call to 'f'}}
  66. }