diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2013-06-14 22:27:52 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2013-06-14 22:27:52 +0000 |
commit | 82c9b5183f97930e8fb146d6b2eece6cb4d24652 (patch) | |
tree | 35e4ca989aed07fd34f3028cda1e1be75754aa52 /clang/test/SemaCXX/const-cast.cpp | |
parent | ecf9d86404c1f16662cdfb4a3db6c694080b54ed (diff) | |
download | bcm5719-llvm-82c9b5183f97930e8fb146d6b2eece6cb4d24652.tar.gz bcm5719-llvm-82c9b5183f97930e8fb146d6b2eece6cb4d24652.zip |
Fix handling of const_cast from prvalue to rvalue reference: such a cast is
only permitted if the source object is of class type, and should materialize a
temporary for the reference to bind to.
llvm-svn: 184017
Diffstat (limited to 'clang/test/SemaCXX/const-cast.cpp')
-rw-r--r-- | clang/test/SemaCXX/const-cast.cpp | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/const-cast.cpp b/clang/test/SemaCXX/const-cast.cpp index 62851f81280..1fe350d1977 100644 --- a/clang/test/SemaCXX/const-cast.cpp +++ b/clang/test/SemaCXX/const-cast.cpp @@ -38,6 +38,7 @@ char ***good_const_cast_test(ccvpcvpp var) f *fpp = const_cast<f*>(&fp); int const A::* const A::*icapcap = 0; int A::* A::* iapap = const_cast<int A::* A::*>(icapcap); + (void)const_cast<A&&>(A()); // expected-warning {{C++11}} return var4; } @@ -60,5 +61,6 @@ short *bad_const_cast_test(char const *volatile *const volatile *var) f fp2 = const_cast<f>(fp1); // expected-error {{const_cast to 'f' (aka 'int (*)(int)'), which is not a reference, pointer-to-object, or pointer-to-data-member}} void (A::*mfn)() = 0; (void)const_cast<void (A::*)()>(mfn); // expected-error {{const_cast to 'void (A::*)()', which is not a reference, pointer-to-object, or pointer-to-data-member}} + (void)const_cast<int&&>(0); // expected-error {{const_cast from rvalue to reference type 'int &&'}} expected-warning {{C++11}} return **var3; } |