   the integer 102 and the remaining 16 bits are specified on
   the rest. On the last example, we expect a rest with size 32,
   which won't match.
+
+  Size and unit are not applicable to utf8, utf16, and utf32.
+
+  The default size for integers is 8. For floats, it is 64. For
+  binaries, it is the size of the binary. Only the last binary
+  in a binary match can use the default size (all others must
+  have their size specified explicitly). Bitstrings do not have
+  a default size.
+
+  The default unit for integers, floats, and bitstrings is 1. For
+  binaries, it is 8.
+
+  For floats, unit * size must result in 32 or 64, corresponding
+  to binary32 and binary64, respectively.
   """
   defmacro :<<>>.(args)
 

      #=> ** (ArgumentError) argument error

  When a variable or expression is given as a binary part,
  Elixir defaults the type of that part to an integer. In
  the example above, since we haven't specified a type, Elixir
  expected an integer but we passed a binary, resulting in
  `ArgumentError`. We can solve this by explicitly tagging
  it as a binary:

      <<102, rest :: binary>>

  The type can be integer, float, binary, bytes, bitstring,
  bits, utf8, utf16 or utf32:

      <<102, rest :: utf8>>

  The signedness can also be given as signed or unsigned. The
  signedness only matters for matching. Finally, the endieness
  can be big, little or native (meaning it will be solved at
  load time). Passing many options can be done by giving a list:

      <<102, rest :: [binary, native]>>

  Finally, we can also specify size and unit for each part. The
  unit is multiplied by the size to give the effective size of


  """
  defmacro __aliases__(args)
end
