| // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s |
| |
| namespace t1 { |
| template <class T> struct VSX { |
| ~VSX() { static_assert(sizeof(T) != 4, ""); } // expected-error {{static assertion failed due to requirement 'sizeof(int) != 4':}} \ |
| // expected-note {{expression evaluates to '4 != 4'}} |
| }; |
| struct VS { |
| union { |
| VSX<int> _Tail; |
| }; |
| ~VS() { } |
| VS(short); |
| VS(); |
| }; |
| VS::VS() : VS(0) { } // delegating constructors should not produce errors |
| VS::VS(short) : _Tail() { } // expected-note {{in instantiation of member function 't1::VSX<int>::~VSX' requested here}} |
| } |
| |
| |
| namespace t2 { |
| template <class T> struct VSX { |
| ~VSX() { static_assert(sizeof(T) != 4, ""); } // expected-error {{static assertion failed due to requirement 'sizeof(int) != 4':}} \ |
| // expected-note {{expression evaluates to '4 != 4'}} |
| }; |
| struct VS { |
| union { |
| struct { |
| VSX<int> _Tail; |
| }; |
| }; |
| ~VS() { } |
| VS(short); |
| }; |
| VS::VS(short) : _Tail() { } // expected-note {{in instantiation of member function 't2::VSX<int>::~VSX' requested here}} |
| } |
| |
| |
| namespace t3 { |
| template <class T> struct VSX { |
| ~VSX() { static_assert(sizeof(T) != 4, ""); } // expected-error {{static assertion failed due to requirement 'sizeof(int) != 4':}} \ |
| // expected-note {{expression evaluates to '4 != 4'}} |
| }; |
| union VS { |
| VSX<int> _Tail; |
| ~VS() { } |
| VS(short); |
| }; |
| VS::VS(short) : _Tail() { } // expected-note {{in instantiation of member function 't3::VSX<int>::~VSX' requested here}} |
| } |