namespace boost {
namespace move_detail {
+template<typename T>
+struct voider { typedef void type; };
+
//////////////////////////////////////
// if_c
//////////////////////////////////////
//////////////////////////////////////
// enable_if_c
//////////////////////////////////////
-template <bool B, class T = void>
+struct enable_if_nat{};
+
+template <bool B, class T = enable_if_nat>
struct enable_if_c
{
typedef T type;
//////////////////////////////////////
// enable_if
//////////////////////////////////////
-template <class Cond, class T = void>
+template <class Cond, class T = enable_if_nat>
struct enable_if : enable_if_c<Cond::value, T> {};
//////////////////////////////////////
// disable_if_c
//////////////////////////////////////
-template <bool B, class T = void>
+template <bool B, class T = enable_if_nat>
struct disable_if_c
: enable_if_c<!B, T>
{};
//////////////////////////////////////
// disable_if
//////////////////////////////////////
-template <class Cond, class T = void>
+template <class Cond, class T = enable_if_nat>
struct disable_if : enable_if_c<!Cond::value, T> {};
//////////////////////////////////////
//////////////////////////////////////
// enable_if_same
//////////////////////////////////////
-template <class T, class U, class R = void>
+template <class T, class U, class R = enable_if_nat>
struct enable_if_same : enable_if<is_same<T, U>, R> {};
//////////////////////////////////////
// disable_if_same
//////////////////////////////////////
-template <class T, class U, class R = void>
+template <class T, class U, class R = enable_if_nat>
struct disable_if_same : disable_if<is_same<T, U>, R> {};
} //namespace move_detail {