1b82dcb62SLouis Dionne //===----------------------------------------------------------------------===// 2b82dcb62SLouis Dionne // 3b82dcb62SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4b82dcb62SLouis Dionne // See https://llvm.org/LICENSE.txt for license information. 5b82dcb62SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6b82dcb62SLouis Dionne // 7b82dcb62SLouis Dionne //===----------------------------------------------------------------------===// 8b82dcb62SLouis Dionne 9b82dcb62SLouis Dionne // test forward 10b82dcb62SLouis Dionne 11b82dcb62SLouis Dionne #include <utility> 12b82dcb62SLouis Dionne 13b82dcb62SLouis Dionne #include "test_macros.h" 14b82dcb62SLouis Dionne 15b82dcb62SLouis Dionne struct A 16b82dcb62SLouis Dionne { 17b82dcb62SLouis Dionne }; 18b82dcb62SLouis Dionne source()19b82dcb62SLouis DionneA source() {return A();} csource()20b82dcb62SLouis Dionneconst A csource() {return A();} 21b82dcb62SLouis Dionne main(int,char **)22b82dcb62SLouis Dionneint main(int, char**) 23b82dcb62SLouis Dionne { 24b82dcb62SLouis Dionne { 25b82dcb62SLouis Dionne (void)std::forward<A&>(source()); // expected-note {{requested here}} 26*9bb9ec38SLouis Dionne // expected-error-re@*:* 1 {{static assertion failed{{.*}}cannot forward an rvalue as an lvalue}} 27b82dcb62SLouis Dionne } 28b82dcb62SLouis Dionne { 29b82dcb62SLouis Dionne const A ca = A(); 30b82dcb62SLouis Dionne std::forward<A&>(ca); // expected-error {{no matching function for call to 'forward'}} 31b82dcb62SLouis Dionne } 32b82dcb62SLouis Dionne { 33b82dcb62SLouis Dionne std::forward<A&>(csource()); // expected-error {{no matching function for call to 'forward'}} 34b82dcb62SLouis Dionne } 35b82dcb62SLouis Dionne { 36b82dcb62SLouis Dionne const A ca = A(); 37b82dcb62SLouis Dionne std::forward<A>(ca); // expected-error {{no matching function for call to 'forward'}} 38b82dcb62SLouis Dionne } 39b82dcb62SLouis Dionne { 40b82dcb62SLouis Dionne std::forward<A>(csource()); // expected-error {{no matching function for call to 'forward'}} 41b82dcb62SLouis Dionne } 42b82dcb62SLouis Dionne { 43b82dcb62SLouis Dionne A a; 44b82dcb62SLouis Dionne std::forward(a); // expected-error {{no matching function for call to 'forward'}} 45b82dcb62SLouis Dionne } 46b82dcb62SLouis Dionne 47b82dcb62SLouis Dionne return 0; 48b82dcb62SLouis Dionne } 49