brintos

brintos / llvm-project-archived public Read only

0
0
Text · 791 B · 57f9923 Raw
20 lines · cpp
1// RUN: %clang_cc1 -fexperimental-new-constant-interpreter -std=c++17 -verify=expected,both %s2// RUN: %clang_cc1 -std=c++17 -verify=ref,both %s3 4template<typename T, T val> struct A {};5namespace Temp {6  struct S { int n; };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}}12}13 14char arr[3];15A<const char*, &arr[1]> d; // both-error {{refers to subobject '&arr[1]'}}16 17void Func() {18  A<const char*, __func__> a; // both-error {{pointer to subobject of predefined '__func__' variable}}19}20