1 // xrefwrap internal header
2 #ifndef _XREFWRAP_
3 #define _XREFWRAP_
4 #include <xtr1common>
5
6 _STD_BEGIN
7  namespace tr1 {    // TR1 additions
8
9 // IMPLEMENT std::tr1::result_of
10     // TEMPLATE STRUCT _Copy_cv
11 template<class _Tgt,
12     class _Src>
13     struct _Copy_cv
14     {    // plain version
15     typedef _Tgt& _Type;
16     };
17
18 template<class _Tgt,
19     class _Src>
20     struct _Copy_cv<_Tgt, const _Src&>
21     {    // const version
22     typedef const _Tgt& _Type;
23     };
24
25 template<class _Tgt,
26     class _Src>
27     struct _Copy_cv<_Tgt, volatile _Src&>
28     {    // volatile version
29     typedef volatile _Tgt& _Type;
30     };
31
32 template<class _Tgt,
33     class _Src>
34     struct _Copy_cv<_Tgt, const volatile _Src&>
35     {    // const volatile version
36     typedef const volatile _Tgt& _Type;
37     };
38
39     // TEMPLATE STRUCT _Result_of
40 template<class _Ty>
41     struct _Result_of;
42
43 #define _INCL_FILE <xxresult>
44 #include <xfwrap>
45
46     // TEMPLATE STRUCT result_of
47 template<class _Fty>
48     struct result_of
49     {    // template to determine result of call operation
50     typedef typename _Result_of<_Fty>::_Type type;
51     };
52
53 // SUPPORT CLASSES FOR CALL WRAPPERS
Lines 54 ... 453 are skipped.
454         {    // construct
455         }
456
457     operator _Ty&() const
458         {    // return reference
459         return (this->_Get());
460         }
461
462     _Ty& get() const
463         {    // return reference
464         return (this->_Get());
465         }
466     };
467
468     // TEMPLATE FUNCTIONS ref AND cref
469 template<class _Ty>
470     reference_wrapper<_Ty> ref(_Ty& _Val)
471     {    // create reference_wrapper<_Ty> object
472     return (reference_wrapper<_Ty>(_Val));
473     }
474
475 template<class _Ty>
476     reference_wrapper<_Ty> ref(reference_wrapper<_Ty> _Val)
477     {    // create reference_wrapper<_Ty> object
478     return (_Val);
479     }
480
481 template<class _Ty>
482     reference_wrapper<const _Ty> cref(const _Ty& _Val)
483     {    // create reference_wrapper<const _Ty> object
484     return (reference_wrapper<const _Ty>(_Val));
485     }
486
487 template<class _Ty>
488     reference_wrapper<const _Ty> cref(reference_wrapper<const _Ty> _Val)
489     {    // create reference_wrapper<const _Ty> object
490     return (_Val);
491     }
492
493     }    // namespace tr1
494 _STD_END
495 #endif  // _XREFWRAP_
496
497
498 /*
499  * Copyright (c) 1992-2008 by P.J. Plauger.  ALL RIGHTS RESERVED.
500  * Consult your license regarding permissions and restrictions.
501 V5.05:0009 */
502