summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/cxx1z-decomposition.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2016-08-12 00:39:32 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2016-08-12 00:39:32 +0000
commitdca60b495822a869c08b9973e4c485a83e8b6c0e (patch)
tree2fdde29c41a18a0db2b21eee23a45ddf8a6fc75c /clang/test/SemaCXX/cxx1z-decomposition.cpp
parente5cc668eb823dc8eb0e6013289846d25b6e82293 (diff)
downloadbcm5719-llvm-dca60b495822a869c08b9973e4c485a83e8b6c0e.tar.gz
bcm5719-llvm-dca60b495822a869c08b9973e4c485a83e8b6c0e.zip
P0217R3: Constant expression evaluation for decomposition declarations.
llvm-svn: 278447
Diffstat (limited to 'clang/test/SemaCXX/cxx1z-decomposition.cpp')
-rw-r--r--clang/test/SemaCXX/cxx1z-decomposition.cpp22
1 files changed, 19 insertions, 3 deletions
diff --git a/clang/test/SemaCXX/cxx1z-decomposition.cpp b/clang/test/SemaCXX/cxx1z-decomposition.cpp
index 6541476a67b..3b1e49cb078 100644
--- a/clang/test/SemaCXX/cxx1z-decomposition.cpp
+++ b/clang/test/SemaCXX/cxx1z-decomposition.cpp
@@ -6,9 +6,13 @@ void use_from_own_init() {
// As a Clang extension, _Complex can be decomposed.
float decompose_complex(_Complex float cf) {
+ static _Complex float scf;
+ auto &[sre, sim] = scf;
+ // ok, this is references initialized by constant expressions all the way down
+ static_assert(&sre == &__real scf);
+ static_assert(&sim == &__imag scf);
+
auto [re, im] = cf;
- //static_assert(&re == &__real cf);
- //static_assert(&im == &__imag cf);
return re*re + im*im;
}
@@ -20,8 +24,20 @@ float decompose_vector(vf3 v) {
return x + y + z;
}
+struct S { int a, b; };
+constexpr int f(S s) {
+ auto &[a, b] = s;
+ return a * 10 + b;
+}
+static_assert(f({1, 2}) == 12);
+
+constexpr bool g(S &&s) {
+ auto &[a, b] = s;
+ return &a == &s.a && &b == &s.b && &a != &b;
+}
+static_assert(g({1, 2}));
+
// FIXME: by-value array copies
// FIXME: template instantiation
// FIXME: ast file support
// FIXME: code generation
-// FIXME: constant expression evaluation
OpenPOWER on IntegriCloud