1bool f(int i) { return i != 5; } 2 3template <class X, class P = bool(X)> 4struct Traits 5{ 6 typedef P type; 7}; 8 9template <class X, class P = typename Traits<X>::type> 10struct S 11{ 12 const P& p_; 13 S( const P& p ) : p_(p) {} // const reference 14}; 15 16template <class X> 17S<X> make_s(const typename Traits<X>::type & p) // const reference 18{ 19 return S<X>(p); // << HERE 20} 21 22 23int main() 24{ 25 make_s<int>(f); 26} 27