111
|
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");
|