# `domain_error/2`

## Description

    domain_error(Domain, Culprit)

Throws a domain error. Used when an argument is of the correct type but outside the valid domain. For example, trying to use an atom as an operator specifier that is not a valid specifier. This built-in method is declared private and thus cannot be used as a message to an object. Calling this predicate is equivalent to the following sequence of goals:

    ...,
    context(Context),
    throw(error(domain_error(Domain,Culprit), Context)).

This allows the user to generate errors in the same format used by the runtime.

Possible values for `Domain` include:

- `character_code_list`

- `close_option`

- `flag_option`

- `flag_value`

- `compiler_flag`

- `flag`

- `prolog_flag`

- `io_mode`

- `non_empty_list`

- `not_less_than_zero`

- `operator_priority`

- `operator_specifier`

- `read_option`

- `source_sink`

- `stream`

- `stream_option`

- `stream_or_alias`

- `stream_position`

- `stream_property`

- `write_option`

- `character_code_list`

- `text_encoding`

- `directive`

- `object_directive`

- `protocol_directive`

- `category_directive`

- `object_relation`

- `protocol_relation`

- `category_relation`

- `object_property`

- `protocol_property`

- `category_property`

- `predicate_property`

- `meta_argument_specifier`

- `meta_directive_template`

- `closure`

- `allocation`

- `redefinition`

- `message_sending_goal`

- `class`

- `prototype`

- `scope`

- `boolean`

The value of `Culprit` is the argument or one of its sub-terms that caused the error.

## Modes and number of proofs

    domain_error(+atom, @nonvar) - error

## Errors

When called:
`domain_error(Domain, Culprit)`

## Examples

    ...,
    atom(Color),
    \+ color(Color),
    domain_error(color, Color).

See also

catch/3, throw/1, context/1, instantiation_error/0, uninstantiation_error/1, type_error/2, existence_error/2, permission_error/3, representation_error/1, evaluation_error/1, resource_error/1, syntax_error/1, system_error/0