]>
Commit | Line | Data |
---|---|---|
81adbcea PC |
1 | // PR c++/64970 |
2 | // { dg-do compile { target c++11 } } | |
3 | ||
4 | template<typename T> | |
5 | T && declval(); | |
6 | ||
7 | template<typename T> | |
8 | struct void_ { using type = void; }; | |
9 | ||
10 | template<typename T> | |
11 | using void_t = typename void_<T>::type; | |
12 | ||
13 | template<class A, class B> | |
14 | struct Outer | |
15 | { | |
16 | template<class C, class D> | |
17 | using Inner = decltype(true ? declval<C>() : declval<D>()); | |
18 | }; | |
19 | ||
20 | template<class A, class B, typename Enable = void> | |
21 | struct S | |
22 | {}; | |
23 | ||
24 | template<class A, class B> | |
25 | struct S<A, B, void_t<typename Outer<A, B>::template Inner<A, B>>> | |
26 | {}; | |
27 | ||
28 | struct A{}; | |
29 | struct B{}; | |
30 | int main() | |
31 | { | |
32 | S<A, B> s; | |
33 | } |