template<class From>
typename copy_rpcv<void, From*>::type void_cast(From *p) {
return p;
}
TMP:
template<class To, class From>
struct copy_rpcv {
typedef To type;
};
template<class To, class From> struct copy_rpcv<To, From& > { typedef typename copy_rpcv<To, From>::type& type; };
template<class To, class From> struct copy_rpcv<To, From* > { typedef typename copy_rpcv<To, From>::type* type; };
template<class To, class From> struct copy_rpcv<To, From const > { typedef typename copy_rpcv<To, From>::type const type; };
template<class To, class From> struct copy_rpcv<To, From volatile> { typedef typename copy_rpcv<To, From>::type volatile type; };
; , , , , , 03 ( 0x?), :
template<class To, class From> struct copy_rpcv<To, From* restrict> { typedef typename copy_rpcv<To, From>::type* restrict type; };
Anthony's "" :
int *const *const p = 0;
void *const *const v = void_cast(p);
Roger Pate
source
share