1 // RUN: %clang_cc1 -fexperimental-new-constant-interpreter -std=c++17 -verify=expected,both %s
2 // RUN: %clang_cc1 -std=c++17 -verify=ref,both %s
4 template<typename T
, T val
> struct A
{};
7 constexpr S
&addr(S
&&s
) { return s
; }
8 A
<S
&, addr({})> a
; // both-error {{reference to temporary object}}
9 A
<S
*, &addr({})> b
; // both-error {{pointer to temporary object}}
10 A
<int &, addr({}).n
> c
; // both-error {{reference to subobject of temporary object}}
11 A
<int *, &addr({}).n
> d
; // both-error {{pointer to subobject of temporary object}}
15 A
<const char*, &arr
[1]> d
; // both-error {{refers to subobject '&arr[1]'}}
18 A
<const char*, __func__
> a
; // both-error {{pointer to subobject of predefined '__func__' variable}}