# Caveats
The warnings and errors in this documents do not cover the complete expl3 language. The caveats currently include the following areas, among others:

- Functions with “weird” (`w`) argument specifiers
- Symbolic evaluation of expansion functions
 [@latexteam2024interfaces, sections 5.4–5.10]
- Validation of parameters in (inline) functions
 (c.f. <#invalid-parameters-in-message-text>
  and <#too-few-arguments-supplied-to-message>)
- Shorthands such as `\~` and `\\` in message texts
 [@latexteam2024interfaces, sections 11.4 and 12.1.3]
- Quotes in shell commands and file names
 [@latexteam2024interfaces, Section 10.7 and Chapter 12]
- Functions used outside their intended context:
   - `\sort_return_*:` outside comparison code
     [@latexteam2024interfaces, Section 6.1]
   - `\prg_return_*:` outside conditional functions
     [@latexteam2024interfaces, Section 9.1]
   - Predicates (`\*_p:*`) outside boolean expressions
     [@latexteam2024interfaces, Section 9.3]
   - `\*_map_break:*` outside a corresponding mapping
     [@latexteam2024interfaces, sections 9.8]
   - `\msg_line_*:`, `\iow_char:N`, and `\iow_newline:`
     outside message text
     [@latexteam2024interfaces, sections 11.3 and 12.1.3]
   - `\iow_wrap_allow_break:` and `\iow_indent:n`
     outside wrapped message text
     [@latexteam2024interfaces, Section 12.1.4]
   - Boolean variable without an accessor function
     `\bool_to_str:N` outside boolean expressions
     [@latexteam2024interfaces, Section 21.4]
     (see <#using-variables-without-accessors>)
   - Integer variable without an accessor function
     `\int_use:N` outside integer or floating point
     expressions [@latexteam2024interfaces, Section 21.4]
     (see <#using-variables-without-accessors>)
   - Dimension variable without an accessor function
     `\dim_use:N` outside dimension or floating point
     expressions [@latexteam2024interfaces, Section 26.7]
     (see <#using-variables-without-accessors>)
   - Skip variable without an accessor function
     `\skip_use:N` outside skip or floating point expressions
     [@latexteam2024interfaces, Section 26.14]
     (see <#using-variables-without-accessors>)
   - Muskip variable without an accessor function
     `\muskip_use:N` outside muskip or floating point
     expressions [@latexteam2024interfaces, Section 26.21]
     (see <#using-variables-without-accessors>)
   - Floating point variable without an accessor function
     `\fp_use:N` outside floating point
     expressions [@latexteam2024interfaces, Section 29.3]
     (see <#using-variables-without-accessors>)
   - Box variable without accessor functions
     `\box_use(_drop)?:N` or `\[hv]box_unpack(_drop)?:N`,
     or without a measuring function
     `\box_(dp|ht|wd|ht_plus_dp):*` outside dimension or
     floating point expressions
     [@latexteam2024interfaces, sections 35.2 and 35.3]
   - Coffin variable without accessor function
     `\coffin_typeset:Nnnnn` outside dimension or
     floating point expressions
     [@latexteam2024interfaces, Section 36.4]
- Validation of literal expressions:
   - Comparison expressions in functions
     `\*_compare(_p:n|:nT?F?)`
   - Regular expressions and replacement text
     [@latexteam2024interfaces, sections 8.1 and 8.2]
   - Boolean expressions
     [@latexteam2024interfaces, Section 9.3]
   - Integer expressions and bases
     [@latexteam2024interfaces, sections 21.1 and 21.8]
   - Dimension, skip, and muskip expressions
     [@latexteam2024interfaces, Chapter 26]
   - Floating point expressions
     [@latexteam2024interfaces, Section 29.12]
   - Color expressions
     [@latexteam2024interfaces, Chapter 37.3]
- Validation of naming schemes and member access:
   - String encoding and escaping
     [@latexteam2024interfaces, Section 18.1]
   - Key–value interfaces
     [@latexteam2024interfaces, Chapter 27]:
       - Are keys defined at the point of use or is the module
         or its subdivision set up to accept unknown keys?
         [@latexteam2024interfaces, sections 27.2, 27.5,
         and 27.6]
       - Are inheritance parents, choices, multi-choices, and
         groups used in a key definition defined at points of
         use? [@latexteam2024interfaces, sections 27.1, 27.3,
         and 27.7]
   - Floating-point symbolic expressions and user-defined
     functions [@latexteam2024interfaces, sections 29.6
     and 29.7]
   - Names of bitset indexes
     [@latexteam2024interfaces, Section 31.1]
   - BCP-47 language tags
     [@latexteam2024interfaces, Section 34.2]
   - Color support
     [@latexteam2024interfaces, Chapter 37]:
       - Named colors [@latexteam2024interfaces, Section 37.4]
       - Color export targets [@latexteam2024interfaces,
         Section 37.8]
       - Color models and their families and params
         [@latexteam2024interfaces, sections 37.2 and 37.9]
- Function `\file_input_stop:` not used on its own line
 [@latexteam2024interfaces, Section 12.2.3]
- Exhaustively or fully expanding quarks and scan marks
 [@latexteam2024interfaces, Chapter 19]
- Bounds checking for accessing constant sequences and other
 sequences where the number of items can be easily bounded
 such as integer and floating point arrays
 [@latexteam2024interfaces, chapters 28 and 30]:
   - Index checking functions `\*_range*:*` and `\*_item*:*`
   - Endless loop checking in functions `\*_step_*:*`
     [@latexteam2024interfaces, Section 21.7]
   - Number of symbols in a value-to-symbol mapping
     [@latexteam2024interfaces, Section 21.8]
- Applying functions `\clist_remove_duplicates:N` and
 `\clist_if_in:*` to comma lists that contain `{`, `}`, or `*`
 [@latexteam2024interfaces, sections 23.3 and 23.4]
- Incorrect parameters to function `\char_generate:nn`
 [@latexteam2024interfaces, Section 24.1]
- Incorrect parameters to functions `\char_set_*code:nn`
 [@latexteam2024interfaces, Section 24.2]
- Using implicit tokens `\c_catcode_(letter|other)_token` or
 the token list `\c_catcode_active_tl`
 [@latexteam2024interfaces, Section 24.3]
- Validation of key–value interfaces
 [@latexteam2024interfaces, Chapter 27]:
   - Setting a key with some properties `.*_g?(set|put)*:*`
     should be validated similarly to calling the corresponding
     functions directly: Have the variables been declared, do
     they have the correct type, does the value have the
     correct type?
   - Do points of use always set keys with property
     `.value_required:n` and never set keys with
     property `.value_forbidden:n`?
- Horizontal box operation on a vertical box or vice
 versa [@latexteam2024interfaces, Chapter 35]