47 lines · cpp
1// RUN: %clang_cc1 -std=c++11 -fblocks -fsyntax-only -verify %s2 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