http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57063
Bug #: 57063 Summary: Valid static_cast from data member to rvalue reference fails to compile Classification: Unclassified Product: gcc Version: 4.8.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: ts...@mail.ru G++ 4.8-20130418 fails to compile the following well-formed code: using T = int; struct X { T &&f() { return static_cast<T &&>(value); } T &&value; }; int main() {} It issues the following error at the line with static_cast: cannot bind ‘T {aka int}’ lvalue to ‘T&& {aka int&&}’ return static_cast<T &&>(value); Command line: g++ test.cpp -std=c++11 -pedantic -v Output: ============================================================== Using built-in specs. COLLECT_GCC=../builds/gcc-4.8-20130418/target/bin/g++ COLLECT_LTO_WRAPPER=../builds/gcc-4.8-20130418/target/libexec/gcc/i686-pc-linux-gnu/4.8.1/lto-wrapper Target: i686-pc-linux-gnu Configured with: ../Downloads/gcc_install/gcc-4.8-20130418/configure --prefix=../builds/gcc-4.8-20130418/target --enable-languages=c,c++ --disable-werror Thread model: posix gcc version 4.8.1 20130418 (prerelease) (GCC) COLLECT_GCC_OPTIONS='-std=c++11' '-Wpedantic' '-v' '-shared-libgcc' '-mtune=generic' '-march=pentiumpro' ../builds/gcc-4.8-20130418/target/libexec/gcc/i686-pc-linux-gnu/4.8.1/cc1plus -quiet -v -D_GNU_SOURCE test.cpp -quiet -dumpbase test.cpp -mtune=generic -march=pentiumpro -auxbase test -Wpedantic -std=c++11 -version -o /tmp/cc8uNbtW.s GNU C++ (GCC) version 4.8.1 20130418 (prerelease) (i686-pc-linux-gnu) compiled by GNU C version 4.8.1 20130418 (prerelease), GMP version 5.1.1, MPFR version 3.1.2, MPC version 1.0.1 GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 ignoring nonexistent directory "../builds/gcc-4.8-20130418/target/lib/gcc/i686-pc-linux-gnu/4.8.1/../../../../i686-pc-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: ../builds/gcc-4.8-20130418/target/lib/gcc/i686-pc-linux-gnu/4.8.1/../../../../include/c++/4.8.1 ../builds/gcc-4.8-20130418/target/lib/gcc/i686-pc-linux-gnu/4.8.1/../../../../include/c++/4.8.1/i686-pc-linux-gnu ../builds/gcc-4.8-20130418/target/lib/gcc/i686-pc-linux-gnu/4.8.1/../../../../include/c++/4.8.1/backward ../builds/gcc-4.8-20130418/target/lib/gcc/i686-pc-linux-gnu/4.8.1/include /usr/local/include ../builds/gcc-4.8-20130418/target/include ../builds/gcc-4.8-20130418/target/lib/gcc/i686-pc-linux-gnu/4.8.1/include-fixed /usr/include End of search list. GNU C++ (GCC) version 4.8.1 20130418 (prerelease) (i686-pc-linux-gnu) compiled by GNU C version 4.8.1 20130418 (prerelease), GMP version 5.1.1, MPFR version 3.1.2, MPC version 1.0.1 GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 0f47b9d9fd89a439a6a420b23c88ecfa test.cpp: In member function ‘T&& X::f()’: test.cpp:7:39: error: cannot bind ‘T {aka int}’ lvalue to ‘T&& {aka int&&}’ return static_cast<T &&>(value); ^