Type operators
Table of contents
Overview
Carbon provides the following operators to transform types:
constas a prefix unary operator produces aconst-qualified type.*as a postfix unary operator produces a pointer type to some other type.
The pointer type operator is also covered as one of the pointer operators.
Details
The semantic details of both const-qualified types and pointer types are provided as part of the values design:
The syntax of these operators tries to mimic the most common appearance of const types and pointer types in C++.
Precedence
Because these are type operators, they don’t have many precedence relationship with non-type operators.
constbinds more tightly than*and can appear unparenthesized in an operand, despite being both a unary operator and having whitespace separating it.- This allows the syntax of a pointer to a
const i32to beconst i32*, which is intended to be familiar to C++ developers. - Forming a
constpointer type requires parentheses:const (i32*).
- This allows the syntax of a pointer to a
- All type operators bind more tightly than
asso they can be used in its type operand.- This also allows a desirable transitive precedence with
if:if condition then T* else U*.
- This also allows a desirable transitive precedence with
Alternatives considered
- Alternative pointer syntaxes
- Alternative syntaxes for locals
- Make
consta postfix rather than prefix operator