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