1 // PR c++/69694
2 // { dg-do compile { target c++11 } }
3 
4 // n3911: TransformationTrait Alias `void_t`
5 template<typename...> struct make_void { using type = void; };
6 template<typename... Ts> using void_t = typename make_void<Ts...>::type;
7 
8 // std::declval<void*&>
9 void*& declval_void();
10 
11 template<typename, typename = void> struct Fun;
12 template<typename R>
13   struct Fun<R(), void>
14 {
15   void fun();
16 };
17 template<typename Desc>
18   struct Fun<Desc, void_t<decltype (declval_void() = Desc::name)>>
19     : Fun<void()>
20 {
21 };
22 
23 struct Tag { static constexpr void* name = 0; };
24 
25 template<typename> void a()
26 {
27   Fun<Tag>{}.fun();
28 }
29 
30 void b() { a<int>(); }
31