diff options
author | Douglas Gregor <dgregor@apple.com> | 2011-01-22 00:06:57 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2011-01-22 00:06:57 +0000 |
commit | dc843f221c95ed404e681b4d782bc81cba14295b (patch) | |
tree | 8eb778de1c05a78bd927110f62873d36060d1813 /test/CXX/expr/expr.post/expr.static.cast/p3-0x.cpp | |
parent | 5232011c942820bba5d033fbd4aa06d4bcbeb6c6 (diff) |
Teach static_cast and dynamic_cast about rvalue references.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124006 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CXX/expr/expr.post/expr.static.cast/p3-0x.cpp')
-rw-r--r-- | test/CXX/expr/expr.post/expr.static.cast/p3-0x.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/test/CXX/expr/expr.post/expr.static.cast/p3-0x.cpp b/test/CXX/expr/expr.post/expr.static.cast/p3-0x.cpp new file mode 100644 index 0000000000..c10335183e --- /dev/null +++ b/test/CXX/expr/expr.post/expr.static.cast/p3-0x.cpp @@ -0,0 +1,24 @@ +// RUN: %clang_cc1 -std=c++0x -fsyntax-only -verify %s + +// A glvalue of type "cv1 T1" can be cast to type "rvalue reference to +// cv2 T2" if "cv2 T2" is reference-compatible with "cv1 T1" (8.5.3). +struct A { }; +struct B : A { }; + +template<typename T> T& lvalue(); +template<typename T> T&& xvalue(); + +void test(A &a, B &b) { + A &&ar0 = static_cast<A&&>(a); + A &&ar1 = static_cast<A&&>(b); + A &&ar2 = static_cast<A&&>(lvalue<A>()); + A &&ar3 = static_cast<A&&>(lvalue<B>()); + A &&ar4 = static_cast<A&&>(xvalue<A>()); + A &&ar5 = static_cast<A&&>(xvalue<B>()); + const A &&ar6 = static_cast<const A&&>(a); + const A &&ar7 = static_cast<const A&&>(b); + const A &&ar8 = static_cast<const A&&>(lvalue<A>()); + const A &&ar9 = static_cast<const A&&>(lvalue<B>()); + const A &&ar10 = static_cast<const A&&>(xvalue<A>()); + const A &&ar11 = static_cast<const A&&>(xvalue<B>()); +} |