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