p4-0x.cpp revision fcab48b626b7ce43625958e857061d721a43a5bc
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RUN: %clang_cc1 -std=c++0x -fsyntax-only -verify %s 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template<typename T> T &lvalue(); 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template<typename T> T &&xvalue(); 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template<typename T> T prvalue(); 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)struct X0 { 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int &f() &; 94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) float &f() &&; 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 11424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) template<typename T> int &ft(T) &; 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) template<typename T> float &ft(T) &&; 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef int &(*func_int_ref)(); 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) typedef float &(*func_float_ref)(); 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) operator func_int_ref() &; 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) operator func_float_ref() &&; 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void g(); 21424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 22424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) int &operator+(const X0&) &; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float &operator+(const X0&) &&; 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) template<typename T> int &operator+(const T&) &; 26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) template<typename T> float &operator+(const T&) &&; 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) int &h() const&; 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) float &h() &&; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int &h2() const&; 31424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) float &h2() const&&; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void X0::g() { 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int &ir1 = f(); 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int &ir2 = X0::f(); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void test_ref_qualifier_binding() { 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int &ir1 = lvalue<X0>().f(); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float &fr1 = xvalue<X0>().f(); 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) float &fr2 = prvalue<X0>().f(); 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int &ir2 = lvalue<X0>().ft(1); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float &fr3 = xvalue<X0>().ft(2); 45424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) float &fr4 = prvalue<X0>().ft(3); 46424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 47424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 48424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void test_ref_qualifier_binding_with_surrogates() { 49424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) int &ir1 = lvalue<X0>()(); 50424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) float &fr1 = xvalue<X0>()(); 51424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) float &fr2 = prvalue<X0>()(); 52424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 53424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 54424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void test_ref_qualifier_binding_operators() { 55424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) int &ir1 = lvalue<X0>() + prvalue<X0>(); 56424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) float &fr1 = xvalue<X0>() + prvalue<X0>(); 57424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) float &fr2 = prvalue<X0>() + prvalue<X0>(); 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int &ir2 = lvalue<X0>() + 1; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float &fr3 = xvalue<X0>() + 2; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float &fr4 = prvalue<X0>() + 3; 61424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 62424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void test_ref_qualifier_overloading() { 64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int &ir1 = lvalue<X0>().h(); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float &fr1 = xvalue<X0>().h(); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float &fr2 = prvalue<X0>().h(); 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) int &ir2 = lvalue<X0>().h2(); 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) float &fr3 = xvalue<X0>().h2(); 6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) float &fr4 = prvalue<X0>().h2(); 7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)