1964f935eSRichard Smith // RUN: %clang_cc1 -std=c++17 -verify %s 2964f935eSRichard Smith 3964f935eSRichard Smith namespace pr41427 { 4964f935eSRichard Smith template <typename T> class A { 5964f935eSRichard Smith public: A(void (*)(T))6964f935eSRichard Smith A(void (*)(T)) {} 7964f935eSRichard Smith }; 8964f935eSRichard Smith D(int)9964f935eSRichard Smith void D(int) {} 10964f935eSRichard Smith f()11964f935eSRichard Smith void f() { 12964f935eSRichard Smith A a(&D); 13964f935eSRichard Smith using T = decltype(a); 14964f935eSRichard Smith using T = A<int>; 15964f935eSRichard Smith } 16964f935eSRichard Smith } 17*d38057f3SRichard Smith 18*d38057f3SRichard Smith namespace Access { 19*d38057f3SRichard Smith struct B { 20*d38057f3SRichard Smith protected: 21*d38057f3SRichard Smith struct type {}; 22*d38057f3SRichard Smith }; 23*d38057f3SRichard Smith template<typename T> struct D : B { // expected-note {{not viable}} 24*d38057f3SRichard Smith D(T, typename T::type); // expected-note {{private member}} 25*d38057f3SRichard Smith }; 26*d38057f3SRichard Smith D b = {B(), {}}; 27*d38057f3SRichard Smith 28*d38057f3SRichard Smith class X { 29*d38057f3SRichard Smith using type = int; 30*d38057f3SRichard Smith }; 31*d38057f3SRichard Smith D x = {X(), {}}; // expected-error {{no viable constructor or deduction guide}} 32*d38057f3SRichard Smith 33*d38057f3SRichard Smith // Once we implement proper support for dependent nested name specifiers in 34*d38057f3SRichard Smith // friends, this should still work. 35*d38057f3SRichard Smith class Y { 36*d38057f3SRichard Smith template <typename T> friend D<T>::D(T, typename T::type); // expected-warning {{dependent nested name specifier}} 37*d38057f3SRichard Smith struct type {}; 38*d38057f3SRichard Smith }; 39*d38057f3SRichard Smith D y = {Y(), {}}; 40*d38057f3SRichard Smith 41*d38057f3SRichard Smith class Z { 42*d38057f3SRichard Smith template <typename T> friend class D; 43*d38057f3SRichard Smith struct type {}; 44*d38057f3SRichard Smith }; 45*d38057f3SRichard Smith D z = {Z(), {}}; 46*d38057f3SRichard Smith } 47