2011-10-14 06:29:44 +08:00
// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s
Implement substitution of a function parameter pack for its set of
instantiated function parameters, enabling instantiation of arbitrary
pack expansions involving function parameter packs. At this point, we
can now correctly compile a simple, variadic print() example:
#include <iostream>
#include <string>
void print() {}
template<typename Head, typename ...Tail>
void print(const Head &head, const Tail &...tail) {
std::cout << head;
print(tail...);
}
int main() {
std::string hello = "Hello";
print(hello, ", world!", " ", 2011, '\n');
}
llvm-svn: 123000
2011-01-08 00:43:16 +08:00
template < class . . . Types > void f ( Types . . . args ) ;
void test ( ) {
f ( ) ;
f ( 1 ) ;
f ( 2 , 1.0 ) ;
}
// Test simple recursive variadic function template
template < typename Head , typename . . . Tail >
void recurse_until_fail ( const Head & , const Tail & . . . tail ) { // expected-note{{candidate function template not viable: requires at least 1 argument, but 0 were provided}}
recurse_until_fail ( tail . . . ) ; / / expected - error { { no matching function for call to ' recurse_until_fail ' } } \
2013-06-23 02:59:18 +08:00
/ / expected - note { { in instantiation of function template specialization ' recurse_until_fail < char [ 7 ] > ' requested here } } \
Implement substitution of a function parameter pack for its set of
instantiated function parameters, enabling instantiation of arbitrary
pack expansions involving function parameter packs. At this point, we
can now correctly compile a simple, variadic print() example:
#include <iostream>
#include <string>
void print() {}
template<typename Head, typename ...Tail>
void print(const Head &head, const Tail &...tail) {
std::cout << head;
print(tail...);
}
int main() {
std::string hello = "Hello";
print(hello, ", world!", " ", 2011, '\n');
}
llvm-svn: 123000
2011-01-08 00:43:16 +08:00
// expected-note{{in instantiation of function template specialization 'recurse_until_fail<double, char [7]>' requested here}}
}
void test_recurse_until_fail ( ) {
recurse_until_fail ( 1 , 3.14159 , " string " ) ; // expected-note{{in instantiation of function template specialization 'recurse_until_fail<int, double, char [7]>' requested here}}
}