|  | // RUN: %check_clang_tidy %s modernize-use-noexcept %t -- \ | 
|  | // RUN:   -config="{CheckOptions: [{key: modernize-use-noexcept.ReplacementString, value: 'NOEXCEPT'}]}" \ | 
|  | // RUN:   -- -std=c++11 -fexceptions | 
|  |  | 
|  | // Example definition of NOEXCEPT -- simplified test to see if noexcept is supported. | 
|  | #if (__has_feature(cxx_noexcept)) | 
|  | #define NOEXCEPT noexcept | 
|  | #else | 
|  | #define NOEXCEPT throw() | 
|  | #endif | 
|  |  | 
|  | void bar() throw() {} | 
|  | // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: dynamic exception specification 'throw()' is deprecated; consider using 'NOEXCEPT' instead [modernize-use-noexcept] | 
|  | // CHECK-FIXES: void bar() NOEXCEPT {} | 
|  |  | 
|  | // Should not trigger a FixItHint, since macros only support noexcept, and this | 
|  | // case throws. | 
|  | class A {}; | 
|  | class B {}; | 
|  | void foobar() throw(A, B); | 
|  | // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: dynamic exception specification 'throw(A, B)' is deprecated; consider removing it instead [modernize-use-noexcept] | 
|  |  | 
|  | // Should not trigger a replacement. | 
|  | void foo() noexcept(true); | 
|  |  | 
|  | struct Z { | 
|  | void operator delete(void *ptr) throw(); | 
|  | void operator delete[](void *ptr) throw(int); | 
|  | ~Z() throw(int) {} | 
|  | }; | 
|  | // CHECK-MESSAGES: :[[@LINE-4]]:35: warning: dynamic exception specification 'throw()' is deprecated; consider using 'NOEXCEPT' instead [modernize-use-noexcept] | 
|  | // CHECK-MESSAGES: :[[@LINE-4]]:37: warning: dynamic exception specification 'throw(int)' is deprecated; consider removing it instead [modernize-use-noexcept] | 
|  | // CHECK-MESSAGES: :[[@LINE-4]]:8: warning: dynamic exception specification 'throw(int)' is deprecated; consider removing it instead [modernize-use-noexcept] | 
|  | // CHECK-FIXES: void operator delete(void *ptr) NOEXCEPT; | 
|  | // CHECK-FIXES: void operator delete[](void *ptr) throw(int); | 
|  | // CHECK-FIXES: ~Z() throw(int) {} |