1*30adb9fdSZhouyi Zhou // RUN: %clang_cc1 -verify %s
2*30adb9fdSZhouyi Zhou // RUN: %clang_cc1 -std=c++11 -verify %s
3*30adb9fdSZhouyi Zhou // RUN: %clang_cc1 -std=c++17 -verify %s
4*30adb9fdSZhouyi Zhou // RUN: %clang_cc1 -std=c++1z -verify %s
5*30adb9fdSZhouyi Zhou #if __cplusplus >= 201703
6*30adb9fdSZhouyi Zhou // expected-no-diagnostics
7*30adb9fdSZhouyi Zhou #endif
8*30adb9fdSZhouyi Zhou class A {
9*30adb9fdSZhouyi Zhou public:
10*30adb9fdSZhouyi Zhou   static const char X;
11*30adb9fdSZhouyi Zhou };
12*30adb9fdSZhouyi Zhou const char A::X = 0;
13*30adb9fdSZhouyi Zhou 
14*30adb9fdSZhouyi Zhou template<typename U> void func() noexcept(U::X);
15*30adb9fdSZhouyi Zhou 
16*30adb9fdSZhouyi Zhou template<class... B, char x>
17*30adb9fdSZhouyi Zhou #if __cplusplus >= 201703
foo(void (B...)noexcept (x))18*30adb9fdSZhouyi Zhou void foo(void(B...) noexcept(x)) {}
19*30adb9fdSZhouyi Zhou #else
20*30adb9fdSZhouyi Zhou void foo(void(B...) noexcept(x)) {} // expected-note{{candidate template ignored}}
21*30adb9fdSZhouyi Zhou #endif
22*30adb9fdSZhouyi Zhou 
bar()23*30adb9fdSZhouyi Zhou void bar()
24*30adb9fdSZhouyi Zhou {
25*30adb9fdSZhouyi Zhou #if __cplusplus >= 201703
26*30adb9fdSZhouyi Zhou   foo(func<A>);
27*30adb9fdSZhouyi Zhou #else
28*30adb9fdSZhouyi Zhou   foo(func<A>);	// expected-error{{no matching function for call}}
29*30adb9fdSZhouyi Zhou #endif
30*30adb9fdSZhouyi Zhou }
31*30adb9fdSZhouyi Zhou 
32*30adb9fdSZhouyi Zhou 
33