Expression Functions
Author: JTC1/SC22/WG9/ARG, by Randall Brukardt, ARG Editor

Ada Reference Manual — Legal Information

# 6.8 Expression Functions

1/3
An expression_function_declaration provides a shorthand to declare a function whose body consists of a single return statement.

#### Syntax

2/3
expression_function_declaration ::=
[overriding_indicator]
function_specification is
(expression)
[aspect_specification];

#### Name Resolution Rules

3/3
The expected type for the expression of an expression_function_declaration is the result type (see 6.5) of the function.

#### Legality Rules

4/3
If an expression_function_declaration is a completion, it shall be the completion of a subprogram_declaration or generic_subprogram_declaration. The profile of an expression_function_declaration that completes a declaration shall conform fully to that of the declaration.
5/3
If the result subtype has one or more unconstrained access discriminants, the accessibility level of the anonymous access type of each access discriminant, as determined by the expression of the expression function, shall not be statically deeper than that of the master that elaborated the expression_function_declaration.

#### Static Semantics

6/3
An expression_function_declaration declares an expression function. A completion is not allowed for an expression_function_declaration; however, an expression_function_declaration can complete a previous declaration.

#### Dynamic Semantics

7/3
The execution of an expression function is invoked by a subprogram call. For the execution of a subprogram call on an expression function, the execution of the subprogram_body executes an implicit function body containing only a simple_return_statement whose expression is that of the expression function.
8/3
The elaboration of an expression_function_declaration has no other effect than to establish that the expression function can be called without failing the Elaboration_Check.

#### Examples

9/3
function Is_Origin (P : in Point) return Boolean is -- see 3.9
(P.X = 0.0 and P.Y = 0.0);

Ada 2005 and 2012 Editions sponsored in part by Ada-Europe