1d8f5b333f96b4e8018ff3a0d0db62d9e78eb6bddDouglas Gregor// RUN: %clang_cc1 -fsyntax-only -verify %s 28e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs// expected-no-diagnostics 3d8f5b333f96b4e8018ff3a0d0db62d9e78eb6bddDouglas Gregor 4d8f5b333f96b4e8018ff3a0d0db62d9e78eb6bddDouglas Gregornamespace PR8598 { 5d8f5b333f96b4e8018ff3a0d0db62d9e78eb6bddDouglas Gregor template<class T> struct identity { typedef T type; }; 6d8f5b333f96b4e8018ff3a0d0db62d9e78eb6bddDouglas Gregor 7d8f5b333f96b4e8018ff3a0d0db62d9e78eb6bddDouglas Gregor template<class T, class C> 8d8f5b333f96b4e8018ff3a0d0db62d9e78eb6bddDouglas Gregor void f(T C::*, typename identity<T>::type*){} 9d8f5b333f96b4e8018ff3a0d0db62d9e78eb6bddDouglas Gregor 10d8f5b333f96b4e8018ff3a0d0db62d9e78eb6bddDouglas Gregor struct X { void f() {}; }; 11d8f5b333f96b4e8018ff3a0d0db62d9e78eb6bddDouglas Gregor 12d8f5b333f96b4e8018ff3a0d0db62d9e78eb6bddDouglas Gregor void g() { (f)(&X::f, 0); } 13d8f5b333f96b4e8018ff3a0d0db62d9e78eb6bddDouglas Gregor} 14fc55a8290a3e81111c0a373e1a04b09dd7da0b98Douglas Gregor 15fc55a8290a3e81111c0a373e1a04b09dd7da0b98Douglas Gregornamespace PR12132 { 16fc55a8290a3e81111c0a373e1a04b09dd7da0b98Douglas Gregor template<typename S> void fun(const int* const S::* member) {} 17fc55a8290a3e81111c0a373e1a04b09dd7da0b98Douglas Gregor struct A { int* x; }; 18fc55a8290a3e81111c0a373e1a04b09dd7da0b98Douglas Gregor void foo() { 19fc55a8290a3e81111c0a373e1a04b09dd7da0b98Douglas Gregor fun(&A::x); 20fc55a8290a3e81111c0a373e1a04b09dd7da0b98Douglas Gregor } 21fc55a8290a3e81111c0a373e1a04b09dd7da0b98Douglas Gregor} 22