#ifndef BINARY_INCLUDED
# define BINARY_INCLUDED

template<char FIRST, char... REST> struct binary
{
  static_assert(FIRST == '0' || FIRST == '1', "invalid binary digit" );
  enum { value = ((FIRST - '0') << sizeof...(REST)) + binary<REST...>::value };
};

template<> struct binary<'0'> { enum { value = 0 }; };
template<> struct binary<'1'> { enum { value = 1 }; };

template<char... LITERAL> inline
constexpr unsigned int operator "" _b() { return binary<LITERAL...>::value; }

#endif // BINARY_INCLUDED