# 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 `const` a postfix rather than prefix operator