#ifndef _TYPE_OPERATION_H
#define _TYPE_OPERATION_H
namespace BPrivate {
template<typename T>
class TypeOperation {
public:
typedef T ArgT;
typedef T BareT;
typedef T const ConstT;
typedef T& RefT;
typedef T& BareRefT;
typedef T const& ConstRefT;
};
template<typename T>
class TypeOperation<T const> {
public:
typedef T const ArgT;
typedef T BareT;
typedef T const ConstT;
typedef T const& RefT;
typedef T& BareRefT;
typedef T const& ConstRefT;
};
template<typename T>
class TypeOperation<T&> {
public:
typedef T& ArgT;
typedef typename TypeOperation<T>::BareT BareT;
typedef T const ConstT;
typedef T& RefT;
typedef typename TypeOperation<T>::BareRefT BareRefT;
typedef T const& ConstRefT;
};
template<>
class TypeOperation<void> {
public:
typedef void ArgT;
typedef void BareT;
typedef void const ConstT;
typedef void RefT;
typedef void BareRefT;
typedef void ConstRefT;
};
}
using BPrivate::TypeOperation;
#endif