[] is not valid
[^] is not valid
[-] means "-"
[a-] means "a | -"
[-a] means "a | -"
[c^] means "c | ^"
[---] means "-"
[+--] means "+ | , | -" (i.e. range)
[c-a] is an error (negative range)
[--+] is an error (negative range) 
[+--b] is an error (even though [+--] and [b] are both valid)
[+--a-b] is an error (even though [+--] and [a-b] are both valid)
[----] is an error
[--/b] means "- | . | / | b"
[^-_] means "!( ^ | _ )"

Generalizations:
Dash is only literal if first or last
Dash-dash can only appear first or last
Caret is literal iff not first
Character classes cannot be empty

Tested in flex 2.5.4 (macbook919) and lex 2.5.33 (jack) (actually a link to flex)