// PR c++/48948 // { dg-do compile { target c++11 } } struct A { A(); }; struct B { friend constexpr int f(B) { return 0; } // OK friend constexpr int f(A) { return 0; } // { dg-error "constexpr" } }; template struct C { friend constexpr int f(C) { return 0; } friend constexpr int g(C, A) { return 0; } // { dg-error "double" } constexpr int m(C) { return 0; } constexpr int m(A) { return 0; } // { dg-error "double" } }; constexpr int i = f(C()); constexpr int j = C().m(C()); constexpr int k = C().m(A()); // { dg-error "constexpr" } constexpr int l = g(C(),A()); // { dg-error "constexpr" }