Remote Call Framework 3.3
StdFileSystem.hpp
1 
2 //******************************************************************************
3 // RCF - Remote Call Framework
4 //
5 // Copyright (c) 2005 - 2022, Delta V Software. All rights reserved.
6 // https://www.deltavsoft.com
7 //
8 // RCF is distributed under dual licenses - closed source or GPL.
9 // Consult your particular license for conditions of use.
10 //
11 // If you have not purchased a commercial license, you are using RCF under GPL terms.
12 //
13 // Version: 3.3
14 // Contact: support <at> deltavsoft.com
15 //
16 //******************************************************************************
17 
18 #ifndef INCLUDE_RCF_STDFILESYSTEM_HPP
19 #define INCLUDE_RCF_STDFILESYSTEM_HPP
20 
21 // This header allows us to pull in either <filesystem> or <experimental/filesystem>
22 // , depending on what the compiler supports.
23 
24 #if defined(_MSC_VER) && _MSC_VER < 1920
25  // VS 2017 and older - always use std::experimental::filesystem.
26 # define INCLUDE_STD_FILESYSTEM_EXPERIMENTAL 1
27 #elif defined(__cpp_lib_filesystem)
28 # define INCLUDE_STD_FILESYSTEM_EXPERIMENTAL 0
29 #elif defined(__cpp_lib_experimental_filesystem)
30 # define INCLUDE_STD_FILESYSTEM_EXPERIMENTAL 1
31 #elif !defined(__has_include)
32 # define INCLUDE_STD_FILESYSTEM_EXPERIMENTAL 1
33 #elif __has_include(<filesystem>)
34 # ifdef _MSC_VER
35  // Visual C++
36 # if __has_include(<yvals_core.h>)
37 # include <yvals_core.h>
38 # if defined(_HAS_CXX17) && _HAS_CXX17
39 # define INCLUDE_STD_FILESYSTEM_EXPERIMENTAL 0
40 # endif
41 # endif
42 # ifndef INCLUDE_STD_FILESYSTEM_EXPERIMENTAL
43 # define INCLUDE_STD_FILESYSTEM_EXPERIMENTAL 1
44 # endif
45 # else
46  // non-Visual C++
47 # define INCLUDE_STD_FILESYSTEM_EXPERIMENTAL 0
48 # endif
49 #elif __has_include(<experimental/filesystem>)
50 # define INCLUDE_STD_FILESYSTEM_EXPERIMENTAL 1
51 #else
52 # error Could not find system header "<filesystem>" or "<experimental/filesystem>"
53 #endif
54 
55 // Now include the relevant header.
56 
57 #if INCLUDE_STD_FILESYSTEM_EXPERIMENTAL
58 
59 #include <experimental/filesystem>
60 namespace RCF_FILESYSTEM_NS = std::experimental::filesystem;
61 
62 #else
63 
64 #include <filesystem>
65 namespace RCF_FILESYSTEM_NS = std::filesystem;
66 
67 #endif
68 
69 
70 
71 #endif // ! INCLUDE_RCF_STDFILESYSTEM_HPP