xref: /llvm-project/libcxx/test/std/utilities/utility/forward/forward.verify.cpp (revision 9bb9ec380ace81d040d3a0a0a2ae9a75733ab330)
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 Dionne A source() {return A();}
csource()20b82dcb62SLouis Dionne const A csource() {return A();}
21b82dcb62SLouis Dionne 
main(int,char **)22b82dcb62SLouis Dionne int 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