]>
Commit | Line | Data |
---|---|---|
49bb4bbe JM |
1 | // PR c++/53039 |
2 | // { dg-do compile { target c++11 } } | |
3 | ||
4 | template <class, class> | |
5 | struct is_convertible | |
6 | { | |
7 | static const bool value = true; | |
8 | }; | |
9 | ||
10 | template<bool, class T> | |
11 | struct enable_if | |
12 | { | |
13 | typedef T type; | |
14 | }; | |
15 | ||
16 | template <bool...> | |
17 | struct Xs | |
18 | { | |
19 | static const bool value = true; | |
20 | }; | |
21 | ||
22 | template<typename... BTs> | |
23 | class BType | |
24 | { | |
25 | template <typename... BUs, | |
26 | typename enable_if< | |
27 | Xs<is_convertible<BUs, BTs>::value...>::value, | |
28 | bool>::type = false> | |
29 | void fooX(BUs&&...); | |
30 | }; | |
31 | ||
32 | template <typename... ATs> | |
33 | struct AType | |
34 | { | |
35 | template <typename... AUs, | |
36 | typename enable_if< | |
37 | Xs<is_convertible<AUs, ATs>::value...>::value, | |
38 | bool>::type = false> | |
39 | void foo(AUs&&...); | |
40 | }; | |
41 | ||
42 | int main() | |
43 | { | |
44 | AType<int, int> t; | |
45 | t.foo(1, 1); | |
46 | } |