111
|
1 // { dg-do compile { target c++11 } }
|
|
2 template<template<int, int> class Meta, int Initial, int... Values>
|
|
3 struct accumulate {
|
|
4 static const int value = Initial;
|
|
5 };
|
|
6
|
|
7 template<template<int, int> class Meta, int Initial, int Value, int... Rest>
|
|
8 struct accumulate<Meta, Initial, Value, Rest...> {
|
|
9 static const int value =
|
|
10 Meta<Value, accumulate<Meta, Initial, Rest...>::value>::value;
|
|
11 };
|
|
12
|
|
13 template<int X, int Y>
|
|
14 struct sum {
|
|
15 static const int value = X + Y;
|
|
16 };
|
|
17
|
|
18 template<int X, int Y>
|
|
19 struct prod {
|
|
20 static const int value = X * Y;
|
|
21 };
|
|
22
|
|
23 int a0[accumulate<sum,0,1,2,3,4,5>::value == 15? 1 : -1];
|
|
24 int a1[accumulate<prod,1,1,2,3,4,5>::value == 120? 1 : -1];
|