1 // PR c++/54323
2 // { dg-do compile { target c++11 } }
3 
4 template<bool, typename T = void>
5 struct enable_if { };
6 
7 template<typename T>
8 struct enable_if<true, T>
9 { typedef T type; };
10 
11 template<template<typename> class CRTP, typename T>
12 class Base
13 {
14 public:
15   template<template<typename> class CRTP0, typename T0, class>
16   friend int func(const Base<CRTP0, T0>& rhs);
17 
18 protected:
19   int n;
20 };
21 
22 template<template<typename> class CRTP0, typename T0,
23 	 class = typename enable_if<true>::type>
24 int func(const Base<CRTP0, T0>& rhs)
25 {
26   return rhs.n;
27 }
28 
29 template<typename T>
30 class Derived : public Base<Derived, T> {};
31 
32 int main()
33 {
34   Derived<int> x;
35   func(x);
36   return 0;
37 }
38