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