1 // { dg-do compile { target c++11 } } 2 3 template<typename...> struct tuple { }; 4 5 template<template<typename T> class Meta, typename... Values> 6 struct apply_all 7 { 8 typedef tuple<typename Meta<Values>::type...> type; 9 }; 10 11 template<typename T, typename U> 12 struct is_same { 13 static const bool value = false; 14 }; 15 16 template<typename T> 17 struct is_same<T, T> { 18 static const bool value = true; 19 }; 20 21 template<typename T> 22 struct add_reference { 23 typedef T& type; 24 }; 25 26 template<typename T> 27 struct add_reference<T&> { 28 typedef T& type; 29 }; 30 31 static_assert(is_same<apply_all<add_reference, int, int&, float>::type, 32 tuple<int&, int&, float&> >::value, 33 "check apply"); 34