blob: 8549f2e1618eee3f00afb9c5e6f212c14450f000 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
-module(undefined).
-export([t/0]).
%% As of OTP 19.0 'undefined' is no longer added to fields with a type
%% declaration but without an initializer. The pretty printing of
%% records (erl_types:t_to_string()) is updated to reflect this: if a
%% field is of type 'undefined', it is output if 'undefined' is not in
%% the declared type of the field. (It used to be the case that the
%% singleton type 'undefined' was never output.)
%%
%% One consequence is shown by the example below: the warning about
%% the record construction violating the the declared type shows
%% #r{..., d::'undefined', ...} which is meant to be of help to the
%% user, who could otherwise get confused the first time (s)he gets
%% confronted by the warning.
-record(r,
{
a = {fi},
b = {a,b} :: list(), % violation
c = {a,b} :: list(),
d :: list(), % violation
e = [] :: list(),
f = undefined :: list() % violation
}).
t() ->
#r{c = []}.
|