Qualify std::__invoke in <variant> to prevent ADL
[official-gcc.git] / libstdc++-v3 / testsuite / 27_io / filesystem / path / append / path.cc
blob3bc135c6cd23a8eccf24d58523008e6f0130cbbd
1 // { dg-options "-std=gnu++17 -lstdc++fs" }
2 // { dg-do run { target c++17 } }
3 // { dg-require-filesystem-ts "" }
5 // Copyright (C) 2014-2018 Free Software Foundation, Inc.
6 //
7 // This file is part of the GNU ISO C++ Library. This library is free
8 // software; you can redistribute it and/or modify it under the
9 // terms of the GNU General Public License as published by the
10 // Free Software Foundation; either version 3, or (at your option)
11 // any later version.
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
18 // You should have received a copy of the GNU General Public License along
19 // with this library; see the file COPYING3. If not see
20 // <http://www.gnu.org/licenses/>.
22 // 30.10.7.4.3 path appends [fs.path.append]
24 #include <filesystem>
25 #include <testsuite_hooks.h>
26 #include <testsuite_fs.h>
28 using std::filesystem::path;
29 using __gnu_test::compare_paths;
31 void
32 test01()
34 const path p("/foo/bar");
36 path pp = p;
37 pp /= p;
38 compare_paths( pp, p );
40 path q("baz");
42 path qq = q;
43 qq /= q;
44 compare_paths( qq, "baz/baz" );
46 q /= p;
47 compare_paths( q, p );
49 path r = "";
50 r /= path();
51 VERIFY( r.empty() );
53 r /= path("rel");
54 VERIFY( !r.is_absolute() );
56 path s = "dir/";
57 s /= path("/file");
58 compare_paths( s, "/file" );
60 s = "dir/";
61 s /= path("file");
62 compare_paths( s, "dir/file" );
65 void
66 test02()
68 // C++17 [fs.path.append] p4
70 path p = path("//host") / "foo";
71 compare_paths( p, "//host/foo" );
73 path pp = path("//host/") / "foo";
74 compare_paths( pp, "//host/foo" );
76 path q = path("foo") / "";
77 compare_paths( q, "foo/" );
79 path qq = path("foo") / "/bar";
80 compare_paths( qq, "/bar" );
83 int
84 main()
86 test01();
87 test02();