1// RUN: %clang_cc1 -std=c++11 -fblocks -fsyntax-only -verify %s 2 3// Tests the use of blocks with variadic templates. 4template<typename ...Args> 5int f0(Args ...args) { 6 return ^ { 7 return sizeof...(Args); 8 }() + ^ { 9 return sizeof...(args); 10 }(); 11} 12 13template<typename ...Args> 14int f1(Args ...args) { 15 return ^ { 16 return f0(args...); 17 }(); 18} 19 20template int f0(int, float, double); 21template int f1(const char*, int, float, double); 22 23template<typename ...Args> 24int f2(Args ...args) { 25 return ^(Args ...block_args) { 26 return f1(block_args...); 27 }(args + 0 ...); 28} 29 30template int f2(const char*, int, float, double); 31 32template<typename ...Args> 33int f3(Args ...args) { 34 return ^(Args *...block_args) { 35 return f1(block_args...); 36 }(&args...); 37} 38 39template int f3(const char*, int, float, double); 40 41template<typename ...Args> 42int PR9953(Args ...args) { 43 return ^(Args *...block_args) { 44 return f1(block_args); // expected-error{{expression contains unexpanded parameter pack 'block_args'}} 45 }(&args...); 46} 47