[exec.queryable.general]

# 33 Execution control library [[exec]](./#exec)

## 33.2 Queries and queryables [[exec.queryable]](exec.queryable#general)

### 33.2.1 General [exec.queryable.general]

[1](#1)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L115)

A [*queryable object*](#def:object,queryable "33.2.1 General [exec.queryable.general]") is
a read-only collection of key/value pair
where each key is a customization point object known as a [*query object*](#def:query_object "33.2.1 General [exec.queryable.general]")[.](#1.sentence-1)

A [*query*](#def:query "33.2.1 General [exec.queryable.general]") is an invocation of a query object
with a queryable object as its first argument and
a (possibly empty) set of additional arguments[.](#1.sentence-2)

A query imposes syntactic and semantic requirements on its invocations[.](#1.sentence-3)

[2](#2)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L124)

Let q be a query object,
let args be a (possibly empty) pack of subexpressions,
let env be a subexpression
that refers to a queryable object o of type O, and
let cenv be a subexpression referring to o such that decltype((cenv)) is const O&[.](#2.sentence-1)

The expression q(env, args...) is equal to ([[concepts.equality]](concepts.equality "18.2 Equality preservation"))
the expression q(cenv, args...)[.](#2.sentence-2)

[3](#3)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L134)

The type of a query expression cannot be void[.](#3.sentence-1)

[4](#4)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L137)

The expression q(env, args...) is
equality-preserving ([[concepts.equality]](concepts.equality "18.2 Equality preservation")) and
does not modify the query object or the arguments[.](#4.sentence-1)

[5](#5)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L142)

If the expression env.query(q, args...) is well-formed,
then it is expression-equivalent to q(env, args...)[.](#5.sentence-1)

[6](#6)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L146)

Unless otherwise specified,
the result of a query is valid as long as the queryable object is valid[.](#6.sentence-1)
